2017-11-21 2 views
0

scipy.stats.binned_statistic_2d에서 얻을 수 있듯이 binned 통계를 플롯해야합니다. 기본적으로 가장자리 값과 bin 데이터가 있음을 의미합니다. 이것은 또한 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 번째 값의 배율이 제외되므로 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

두 옵션 중 하나와 관련된 문제를 이해할 수 없습니다. 여기서는 간단히 plt.hist2d뿐만 아니라 pcolormesh로 numpy 히스토그램 데이터를 사용하는 코드도 있습니다.

enter image description here

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와 함께 작동합니다.

+0

네 말이 맞아. 제 잘못 이해의 핵심은 길이가 Z보다 큰 치수를 가진 pcolormesh에 X와 Y를 전달할 수 있다는 것을 깨닫지 못하고있었습니다. –

관련 문제