簡體   English   中英

使用pcolormesh繪制2D直方圖數據

[英]Plot 2D histogram data with pcolormesh

我需要繪制一個分類的統計數據,就像從scipy.stats.binned_statistic_2d得到的scipy.stats.binned_statistic_2d 基本上,這意味着我有邊值和箱內數據。 這也意味着,我不能 (據我所知)使用plt.hist2d 這是一個代碼片段,用於生成我可能需要繪制的數據類型:

import numpy as np
x_edges = np.arange(6)
y_edges = np.arange(6)
bin_values = np.random.randn(5, 5)

可以想象我可以為此使用pcolormesh ,但是問題是pcolormesh不允許使用bin邊緣值。 下面將只繪制容器1到4中的值。排除了第5​​個值,因為pcolormesh“知道” 4.0處的值是某個值,但是沒有以后的值可以繪制,因此第5個容器的寬度為零。

import matplotlib.pyplot as plt

X, Y = np.broadcast_arrays(x_edges[:5, None], y_edges[None, :5])

plt.figure()
plt.pcolormesh(X, Y, bin_values)
plt.show()

可以通過添加一個等於最后一個值的附加值集來解決此問題:

import matplotlib.pyplot as plt

X, Y = np.broadcast_arrays(x_edges[:, None], y_edges[None, :])
dummy_bin_values = np.zeros([6, 6])
dummy_bin_values[:5, :5] = bin_values
dummy_bin_values[5, :] = dummy_bin_values[4, :]
dummy_bin_values[:, 5] = dummy_bin_values[:, 4]

plt.figure()
plt.pcolormesh(X, Y, dummy_bin_values)
plt.show()

但是,這一個丑陋的hack。 有沒有一種更干凈的方法來繪制帶箱邊緣值的2D直方圖數據? “否”可能是正確的答案,但如果是的話,請說服我。

我不理解這兩個選項中的任何一個的問題。 因此,這里是一個簡單的代碼,它同時使用numpy直方圖數據和pcolormesh,以及簡單地使用plt.hist2d

import numpy as np
import matplotlib.pyplot as plt

x_edges = np.arange(6)
y_edges = np.arange(6)
data = np.random.rand(340,2)*5

### using numpy.histogram2d
bin_values,_,__ = np.histogram2d(data[:,0],data[:,1],bins=(x_edges, y_edges) )
X, Y = np.meshgrid(x_edges,y_edges)

fig, (ax,ax2) = plt.subplots(ncols=2)
ax.set_title("numpy.histogram2d \n + plt.pcolormesh")
ax.pcolormesh(X, Y, bin_values.T)

### using plt.hist2d
ax2.set_title("plt.hist2d")
ax2.hist2d(data[:,0],data[:,1],bins=(x_edges, y_edges))


plt.show()

在此處輸入圖片說明

當然,這對於scipy.stats.binned_statistic_2d同樣有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM