2016-09-05 4 views
1

N 좌표로 값을 저장하는 Nx3 배열이 있습니다. 첫 번째와 두 번째 열은 각각 x와 y 좌표에 해당하고 세 번째 열은 해당 좌표에서의 값을 나타냅니다. 2D 강도 플롯을 플롯하고 싶습니다. 어떻게해야할까요?matplotlib에서 2D 강도 플롯을 플롯하는 방법은 무엇입니까?

좌표가 균등하게 배치 된 경우 meshgrid을 사용하고 imshow을 사용할 수 있지만 데이터에 좌표가 균등하지 않습니다. 게다가, 배열은 매우 큰 N ~ 100000이며, 값 (세 번째 열)은 몇 단계의 크기에 걸쳐 있습니다 (그래서 logplot을 사용해야합니까?). 그러한 그래프를 그릴 수있는 가장 좋은 방법은 무엇입니까?

내가 테스트하지했습니다

답변

2
당신은 (100 × 100 말) 균일 한 그리드에 대한 모든 100000 지점에서 데이터를 보간 griddata를 사용하고 색상의 로그 스케일로 모든 플롯 할 수 있습니다

,

x = data[:,0] 
y = data[:,1] 
z = data[:,2] 

# define grid. 
xi = np.linspace(np.min(x),np.max(x),100) 
yi = np.linspace(np.min(y),np.max(y),100) 

# grid the data. 
zi = griddata(x,y,z,xi,yi,interp='linear') 

#pcolormesh of interpolated uniform grid with log colormap 
plt.pcolormesh(xi,yi,zi,norm=matplotlib.colors.LogNorm()) 

plt.colormap() 
plt.show() 

이것은 기본 생각이지만 정확해야합니다. 이는 원래 (큰) 데이터 세트를 알 필요가없고 단순히 그리드 데이터 xi, yi 및 zi로 작업 할 수 있다는 장점이 있습니다.

대안은

plt.scatter(x, y, c=z,edgecolors='none', norm=matplotlib.colors.LogNorm()) 

, 산점도 색상을하고 그들이 연속 사진을 만들 수 있도록 지점의 바깥 쪽 가장자리를 끕니다.