【问题标题】:Make an python plot from recurring arrays从循环数组制作 python 图
【发布时间】:2017-12-29 14:28:58
【问题描述】:

我有这样排列的数据:

x = [0,1,2,0,1,2,0,1,2]
y = [0,0,0,1,1,1,2,2,2]
z = [2,4,3,3,5,1,1,2,1]

我将如何绘制它以便我有一个 3x3 的 imshow 或等高线图?

【问题讨论】:

标签: python matplotlib


【解决方案1】:

如果 z 实际上是 xy 的函数,并且您想要 countourf 进行绘图,则可以使用 numpy 重塑数组,然后对其进行绘图:

import matplotlib.pyplot as plt
import numpy as np
x = np.array([0,1,2,0,1,2,0,1,2])
y = np.array([0,0,0,1,1,1,2,2,2])
z = np.array([2,4,3,3,5,1,1,2,1])
cols = np.unique(x).shape[0]
X = x.reshape(-1, cols)
Y = y.reshape(-1, cols)
Z = z.reshape(-1, cols)
plt.contourf(X,Y,Z)
plt.show()

【讨论】:

  • 完美!非常感谢!
  • 很高兴为您提供帮助!在 StackOverflow 中,如果答案有帮助,推荐accepting,谢谢!
【解决方案2】:

您可以为此使用contourf。它要求您的数据遵循网格。您可以使用以下方法创建 2D 网格:

x, y = np.meshgrid(x, y)

然后为所有(x, y) 对运行z 的函数并绘图。

import matplotlib.pyplot as plt
...
plt.contourf(x , y, z)
plt.show()

或者你可以有一个3D plot 喜欢:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
...
ax.plot_surface(x, y, z, color='b')
plt.show()

如果您无权访问生成z 的函数。你必须interpolate

from scipy.interpolate import griddata
# points is the original pair (x, y)
grid_z0 = griddata(points, z, (grid_x, grid_y), method='nearest')

【讨论】:

  • 嗯,当我尝试这样做时,countourf 说 z 必须是 2D,而 3D 绘图工作时,绘图是空的(尽管轴是正确的)
  • @jhodgo 我很糟糕,看看更新。您需要创建一个网格。没有它你只能做散点图。
  • 哦,很高兴看到interpolate (+1) 的建议,所以这可以带来更好的结果!我绝对不会想到的!
  • 很高兴它有效!不要忘记接受一个答案来标记每个人都回答的问题:)
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 2023-02-06
  • 2019-09-10
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
相关资源
最近更新 更多