绘图(x,y,z)在2d平面上使用色彩图三倍

时间:2014-10-29 16:32:58

标签: python numpy matplotlib plot scipy

我正在使用python2matplotlib

我有很多三元组(x, y, z)。我需要在2d平面上将它们绘制为一种直方图/热图,其轴为xy,颜色为z

主要问题是x和y不在任何类型的网格上,而是随意变化,因此需要进行某种插值。

我尝试contour(X, Y, Z),但这会将Z视为二维数组,这意味着它需要网格上的值。

2 个答案:

答案 0 :(得分:1)

我喜欢将hexbinC输入选项一起用于此类事情。例如,如果您已将数据从元组三元组解析为x_arry_arrz_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'))