鱼C论坛

 找回密码
 立即注册
查看: 135|回复: 4

[Python] 小白救助,已知三列数据怎样作三维曲面图

[复制链接]
发表于 2024-4-14 18:47:21 | 显示全部楼层 |阅读模式
20鱼币
已知三列数据,需要画出三维曲面图,在jupyter notebook中一直画不出来
  1. def surface_3D():
  2.     import matplotlib.pyplot as plt
  3.     from matplotlib import cm
  4.     from matplotlib.ticker import LinearLocator
  5.     import numpy as np
  6. fig,ax = plt.subplots(subplot_kw={"projection":"3d"})
  7. X = df1.loc[:,0]
  8. Y = df1.loc[:,1]
  9. Z1 = df1.loc[:,2]
  10. X = np.atleast_2d(X)
  11. Y = np.atleast_2d(Y)
  12. Z1 = np.atleast_2d(Z1)
  13. x = np.linspace(0,2,1000)
  14. y = np.linspace(0,2,1000)

  15. surf = ax.plot_surface(X, Y, Z1, cmap=cm.viridis)
  16. ax.set_xlabel('X')  
  17. ax.set_ylabel('Y')  
  18. ax.set_zlabel('Z1')  

  19. fig.colorbar(surf, shrink=0.5, aspect=5)
  20. plt.show()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-14 18:47:22 | 显示全部楼层
Eternal03 发表于 2024-4-14 19:36
就是我的XY值也不是等间距的这种也需要生成等间距的网格数据吗
  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from matplotlib import cm
  5. from mpl_toolkits.mplot3d import Axes3D
  6. from scipy.interpolate import griddata

  7. # 从文件读取数据
  8. file_path = '11111.out'  # 确保文件路径正确,或者调整为正确的文件路径
  9. df = pd.read_csv(file_path, sep='\s+', header=None)

  10. # 定义一个函数来绘制三维曲面图
  11. def surface_3D(df, x_index, y_index, z_index):
  12.     # 生成网格数据
  13.     x = np.linspace(df[x_index].min(), df[x_index].max(), 100)
  14.     y = np.linspace(df[y_index].min(), df[y_index].max(), 100)
  15.     X, Y = np.meshgrid(x, y)
  16.    
  17.     # 二维插值
  18.     points = df[[x_index, y_index]].values
  19.     values = df[z_index].values
  20.     Z = griddata(points, values, (X, Y), method='cubic')
  21.    
  22.     # 绘制图形
  23.     fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
  24.     surf = ax.plot_surface(X, Y, Z, cmap=cm.viridis)
  25.    
  26.     # 设置坐标轴标签
  27.     ax.set_xlabel('X')
  28.     ax.set_ylabel('Y')
  29.     ax.set_zlabel(f'Z{z_index - 2}')

  30.     # 添加颜色条
  31.     fig.colorbar(surf, shrink=0.5, aspect=5)

  32.     plt.show()

  33. # 为每一个 Z 轴绘图
  34. num_columns = df.shape[1]
  35. for z_index in range(2, num_columns):
  36.     surface_3D(df, 0, 1, z_index)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-14 19:20:22 | 显示全部楼层
  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from matplotlib import cm
  5. from mpl_toolkits.mplot3d import Axes3D
  6. from scipy.interpolate import griddata

  7. # 示例数据
  8. data = {
  9.     0: np.random.rand(10),  # X values
  10.     1: np.random.rand(10),  # Y values
  11.     2: np.random.rand(10)   # Z values
  12. }
  13. df1 = pd.DataFrame(data)

  14. def surface_3D(df):
  15.     # 生成网格数据
  16.     x = np.linspace(df[0].min(), df[0].max(), 100)
  17.     y = np.linspace(df[1].min(), df[1].max(), 100)
  18.     X, Y = np.meshgrid(x, y)
  19.    
  20.     # 二维插值
  21.     points = df[[0, 1]].values
  22.     values = df[2].values
  23.     Z = griddata(points, values, (X, Y), method='cubic')
  24.    
  25.     # 绘制图形
  26.     fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
  27.     surf = ax.plot_surface(X, Y, Z, cmap=cm.viridis)
  28.    
  29.     # 设置坐标轴标签
  30.     ax.set_xlabel('X')
  31.     ax.set_ylabel('Y')
  32.     ax.set_zlabel('Z')

  33.     # 添加颜色条
  34.     fig.colorbar(surf, shrink=0.5, aspect=5)

  35.     plt.show()

  36. # 调用函数
  37. surface_3D(df1)
复制代码

zb17lu4vL1.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-4-14 19:34:10 | 显示全部楼层

佬,那要是向这样的文件里第一二列分别为X轴和Y轴,第三列为Z1轴,第四列为Z2轴,第五列为Z3轴......以此类推,要作出好几个几个三维曲面图该怎么办呀

11111.zip

5.7 KB, 下载次数: 1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-4-14 19:36:56 | 显示全部楼层
Eternal03 发表于 2024-4-14 19:34
佬,那要是向这样的文件里第一二列分别为X轴和Y轴,第三列为Z1轴,第四列为Z2轴,第五列为Z3轴......以此 ...

就是我的XY值也不是等间距的这种也需要生成等间距的网格数据吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 19:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表