【问题标题】:how to create heat map from irregular xyz data in pyplot?如何从 pyplot 中的不规则 xyz 数据创建热图?
【发布时间】:2017-09-03 14:09:18
【问题描述】:

我有一堆xz 数据集,我想使用这些文件创建一个热图,其中y 轴是在数据集之间变化的参数。问题是每个数据集中的x 值是不同的。此外,每个数据集中x 值之间的差异不是固定的(例如x[100] - x[99] =/= x[200]-x[199])。我知道我可以对数据进行插值,生成一个网格,然后使用imshow 来显示数据,问题是是否有更直接的解决方案?

【问题讨论】:

  • “热图”可以是直方图、带有方形单元格的 2D 或 hexbin。您似乎在描述表面轮廓/颜色图
  • @f5r5e5d 对不起,我不明白你的意思。也许热图在这里是错误的词。我想根据z 值对表面进行着色。
  • 试试plot_trisurf,比如this example
  • 首先,您应该非常准确地确定您打算制作 2D 还是 3D 绘图。那么问题不在于沿一维的点之间的间距是否相等,而在于您的数据是如何组织的(例如,您是否有 2 个一维数组 xz 以及一个二维数组 xz还是它们都是 1D 或 2D?如果它们是 1D,那么映射到 2D 的映射是什么?那么您需要非常具体地说明您想要获得的绘图类型。
  • 数据集都是二维的,绘图需要是二维的。

标签: python matplotlib interpolation heatmap


【解决方案1】:

您可以使用pcolormesh 绘图。这适用于规则的(即排序的、直线的,但不一定是等距的)网格。

这是一个例子:

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

x = np.array([1,1.5,3,4,5,5.5])
y = np.array([-1,0,2,3.6,4])
X,Y = np.meshgrid(x,y)
Z = np.random.randint(1,11, size=(len(y), len(x)))

plt.pcolormesh(X,Y,Z)
plt.plot(X[1,2],Y[1,2] , marker="o", color="crimson")
plt.text(X[1,2],Y[1,2], str(Z[1,2]), color="crimson", fontsize=20)
plt.colorbar()
plt.show()

请注意,Z[i,j] 中的值绘制在从位置X[i,j],Y[i,j]X[i+1,j+1],Y[i+1,j+1] 的单元格中。所以网格点就是单元格的边缘。
这也意味着如果X,Y,Z 具有相同的形状,则不会绘制Z 的最后一行和最后一列。但是,您可以提供一个在两个维度上都比值数组Z 大一个的网格。

为了研究不同参数的不同图,您可以使用我在此答案中提出的技术:Paging/scrolling through set of 2D heat maps in matplotlib

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 2016-02-28
    • 2018-12-23
    • 1970-01-01
    • 2020-07-13
    • 2018-07-06
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多