如何从pyplot中不规则的xyz数据创建热图?

时间:2017-04-08 06:16:06

标签: python matplotlib interpolation heatmap

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

1 个答案:

答案 0 :(得分: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()

enter image description here

请注意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