2017-11-21 15 views
0

scipy.stats.binned_statistic_2dから得られるように、ビニングされた統計値をプロットする必要があります。基本的には、エッジ値とビン内のデータがあることを意味します。これはまたplt.hist2d(私の知る限り)使用できないことを意味します。ここで私はプロットする必要があるかもしれませんデータの並べ替えを生成するためのコードスニペットです:pcolormeshで2Dヒストグラムデータをプロットする

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

一つは、私は、このためのpcolormeshを使用することができることを想像するだろうが、問題はpcolormeshがビンのエッジ値を許容しないということです。以下は、ビン1〜4の値だけをプロットします。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() 

しかし、この 醜いハックです。ビンエッジ値を使用して2Dヒストグラムデータをプロットする方法がありますか? 「いいえ」は正解かもしれませんが、そうであればそれを説得します。

答えて

2

私は2つのオプションのいずれかの問題を理解していません。だからここでは、単純にplt.hist2dだけでなく、pcolormeshでnumpyのヒストグラムデータを使用するコードも同様です。もちろん

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() 

enter image description here

これは均等にscipy.stats.binned_statistic_2dで動作します。

+0

あなたはそうです。私の誤解の核心は、Zよりも長い長さの次元を持つpcolormeshにXとYを渡すことができないことを認識していなかったことです。 –

関連する問題