使用matplotlib从“列表的列表”绘制3D曲面

6 投票
1 回答
9814 浏览
提问于 2025-04-18 14:30

我搜索了一下,虽然找到了很多关于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()

想了解更多信息,请参考 这个链接这个链接

撰写回答