使用 matplotlib 从“列表列表”中绘制 3d 曲面
Posted
技术标签:
【中文标题】使用 matplotlib 从“列表列表”中绘制 3d 曲面【英文标题】:Plot a 3d surface from a 'list of lists' using matplotlib 【发布时间】:2014-09-15 04:38:33 【问题描述】:我已经搜索了一下,虽然我可以找到许多有用的网格网格示例,但没有一个清楚地表明如何将我的列表列表中的数据转换为我所见过的任何不同方式的可接受形式谈到了。
当谈到 numpy/matplotlib 以及我看到的建议的术语和步骤序列时,我有点迷茫。
我找到的最接近的是Plotting a 3d surface from a list of tuples in matplotlib
我有一个高度数据列表。
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 可能同意的东西。
【问题讨论】:
让这些列表的长度都相同,也就是它会直接与二维 numpy 数组兼容吗? 是的,它们代表一个方形网格。我看到从它们构建一个 2d numpy 数组会相当容易,但我不确定接下来应该如何处理它? IE;如何将我的 data_array=array(data) 转换为 plot_surface 期望的 X、Y、Z 格式?这就是我在atm感到困惑的地方 看看我的回答 ;) 【参考方案1】:如果你想要一个 3d 表面,你必须生成 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()
请参考http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html和http://nbviewer.ipython.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb了解更多信息
【讨论】:
谢谢。这正是我想要的,也是我所需要的。我很快就会正确阅读链接;)以上是关于使用 matplotlib 从“列表列表”中绘制 3d 曲面的主要内容,如果未能解决你的问题,请参考以下文章
无法使用按钮和自定义数据更新 Tkinter matplotlib 图
使用 matplotlib 和 pandas 从 csv 文件中绘制直方图