【问题标题】:How to do colored 2D grid with 3 arrays如何用 3 个数组做彩色 2D 网格
【发布时间】:2017-09-22 21:00:56
【问题描述】:

我有三个长度相等的数组 x、y 和 z。 x 和 y 数组是网格的 x 轴和 y 轴。 z 数组将确定网格块的颜色。例如,

x = [10, 10, 10, 20, 20, 20, 30, 30, 30]
y = [10, 20, 30, 10, 20, 30, 10, 20, 30]
z = [100, 54, 32, 67, 71, 88, 100, 15, 29]

像这样制作 3D 绘图很容易

ax.plot_trisurf(x, y, z, cmap=cm.RdYlGn)

ax.bar3d(x, y, [0] * len(x), 100, 100, z, cmap=cm.RdYlGn)

但我正在寻找类似的东西 this

【问题讨论】:

  • 你能告诉我们一些你尝试过的代码吗?
  • 另外,问一个具体问题也很有帮助。

标签: python arrays matplotlib colors grid


【解决方案1】:

np.meshgrid返回两个二维数组的元组,可以直接解包

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

但是,对于 imshow 情节,您不需要这些。您需要和代码中缺少的是z 值的二维数组。这将是提供给imshow 的数组。

img = plt.imshow(Z)

如果您想改用 meshgrid,可以使用您的 XY 值,

plt.pcolormesh(X,Y,Z)

看到示例数据,可以使用imshow:

x = [10, 10, 10, 20, 20, 20, 30, 30, 30]
y = [10, 20, 30, 10, 20, 30, 10, 20, 30]
z = [100, 54, 32, 67, 71, 88, 100, 15, 29]

import matplotlib.pyplot as plt
import numpy as np

z = np.array(z).reshape(3,3)

plt.imshow(z,extent=[5,35,5,35])

plt.show()

【讨论】:

  • 所以我想使用 X,Y = np.meshgrid(x,y) 然后 plt.pcolormesh(X,Y,Z) 吗?看起来很简单,但它不起作用。
  • 您当然可以使用问题的minimal reproducible example 和问题描述来更新您的问题,而不仅仅是“它不起作用”。否则我帮不了你。
  • 没问题。我添加了一张图片来说明我在寻找什么。
  • 在这种情况下,您可以轻松使用imshow。我更新了答案。
  • 谢谢!不幸的是,我的数组是 z 生成的方式,它没有按顺序出现。然而,x、y、z 的索引是相关的。我将发布一个包含更多详细信息的新问题,但感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2015-04-29
  • 2019-10-27
  • 2021-08-24
  • 1970-01-01
相关资源
最近更新 更多