![](/img/trans.png)
[英]Plot a 2D vertical plane from interpolation of x,y,z numpy defining a vertical plane. Python/Mayavi
[英]Plot (x, y, z) triples on 2d plane with a colormap
我正在使用python2
和matplotlib
。
我有很多三元組(x, y, z)
。 我需要將它們繪制為2d平面上的直方圖/熱圖 ,其軸為x
和y
,顏色為z
。
主要問題是x和y不在任何類型的網格上,而是自由變化,因此需要某種插值。
我嘗試了contour(X, Y, Z)
,但這將Z作為2d數組,這意味着它需要網格上的值。
我喜歡將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
選項更改垃圾箱數量。
盡管如果您有大量的(x,y,z)三元組且x和y 分布均勻 ,則hexbin
可能會很好,但如果它們不是(和/或太少),它會帶有很多相當不愉快的空格。
假設你有
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')
這導致可以像這樣繪制二維數組
pl.imshow(values, origin='lower', extent=[0, max(X), 0, max(Y)],
aspect='auto', cmap=pl.get_cmap('YlOrRd'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.