使用matplotlib从“列表的列表”绘制3D曲面
我搜索了一下,虽然找到了很多关于meshgrid的有用例子,但没有一个能清楚地告诉我,怎么把我的列表中的数据转换成可以用的格式。
在numpy和matplotlib方面,我有点迷茫,看到的术语和步骤让我感到困惑。
我找到的最接近的例子是 用matplotlib从元组列表绘制3D表面
我有一个包含高度数据的列表。
data=[[h1,h2,h3,h...],
[h,h,h,h],
[h,h,h,h],
[h,h,h,h16]]
data[0][1]==h2
data[4][4]==h16
我该如何使用matplotlib/numpy等工具,制作这些值的简单3D表面图呢?就像用颜色图显示z值一样。我可以直接使用imshow(),因为它可以处理列表的列表。但我不太确定如何把我现有的数据切分成plot_surface可以接受的格式。
1 个回答
4
如果你想要一个三维表面,你需要生成x和y坐标。如果你对这些坐标没有特别要求,只想要这个表面的话,可以生成一个给定长度的整数网格:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
data = np.array(data)
length = data.shape[0]
width = data.shape[1]
x, y = np.meshgrid(np.arange(length), np.arange(width))
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
ax.plot_surface(x, y, data)
plt.show()