我正在使用python2
和matplotlib
。
我有很多三元组(x, y, z)
。我需要在2d平面上将它们绘制为一种直方图/热图,其轴为x
和y
,颜色为z
。
主要问题是x和y不在任何类型的网格上,而是随意变化,因此需要进行某种插值。
我尝试contour(X, Y, Z)
,但这会将Z视为二维数组,这意味着它需要网格上的值。
答案 0 :(得分:1)
我喜欢将hexbin
与C
输入选项一起用于此类事情。例如,如果您已将数据从元组三元组解析为x_arr
,y_arr
和z_arr
数组,则可以执行以下操作:
from matplotlib.pyplot import hexbin
hexbin(x_arr, y_arr, C=z_arr)
这隐含地平均六边形区间的数据。如果您想要的不同于简单平均值,则可以更改reduce_C_function
选项。您可以使用gridsize
选项更改容器的数量。
答案 1 :(得分:1)
虽然hexbin
可能很好,如果你有大量的(x,y,z)三元组x和y 分布均匀,它会带来很多相当不愉快的空白,如果他们不是(和/或太少)。
假设你有
X = [ ... ]
Y = [ ... ]
Z = [ ... ]
首先需要创建一个网格
grid_x, grid_y = np.mgrid[0:max(Y):800j, 0:max(X):800j]
其中0:max(Y)
是间隔,800
是步数。然后用
values = interpolate.griddata((Y, X), Z, (grid_x, grid_y), method='linear')
导致可以像这样绘制的2d数组
pl.imshow(values, origin='lower', extent=[0, max(X), 0, max(Y)],
aspect='auto', cmap=pl.get_cmap('YlOrRd'))