2011-03-30 11 views
5

나는 scipy/numpy에 Nx3 행렬을 가지고 있으며, 3 차원 막대 그래프를 만들고 싶습니다. 여기서 X 축과 Y 축은 첫 번째와 두 번째 값에 의해 결정됩니다. 행렬의 번째 열은 각각의 바의 높이는 행렬의 번째 열이고, "데이터"는 다음 행렬이면 바의 수, 바꿔 말하면파이썬 matplotlib에 3d 히스토그램/막대 그래프 플로팅

N.하여 결정

data[:, 0] # values of X-axis 
data[:, 1] # values of Y-axis 
data[:, 2] # values of each Z-axis bar 

각 len (데이터) 당 하나의 막대가 있어야합니다.

Matplot에서 어떻게 할 수 있습니까? lib?

둘째,이 변형으로 어떻게 동일한 작업을 수행 할 수 있습니까? 이번에는 막대를 각 X, Y, Z 차원의 N 빈에 막대 그래프로 막대 그래프로 나타 냅니까? 나는. 각 점에 대한 막대 대신 각 차원의 해당 저장소에 데이터를 막대 그래프로 표시하고 각 저장소에 막대를 그립니다.

감사합니다.

답변

4

Here is one example의 3D 막대 그림. Here is another.

Numpy에는 원하는 사각형 격자 처리를 수행하는 histogram2d이라는 기능이 있습니다.

+0

어떻게 x, y 및 z 축에 레이블을 지정할 수 있습니까? – user248237dfsf

+0

또한 ax.scatter를 사용하여 3D 산점도를 만들 때 자동으로 알파 투명도가있는 일부 점을 표시합니다. 투명도가없는 모든 점을 제거하고 그 점을 어떻게 제거 할 수 있습니까? – user248237dfsf

1

필자는 예제에서 내 데이터의 '높이'를 적절히 형상화하는 데 약간의 어려움을 겪었지만 마침내 다음 코드로 작업하게되었습니다. 여기에서 Z는 모든 데이터를 포함하는 3 차원 배열이고 x와 rval은 기본적으로 데이터 포인트에 해당하는 2 차원 색인입니다.

xs = np.arange(biopsy_num) 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
for y in (np.arange(r_sweep)): 
    z = Z[:,y] 
    ax.bar(xs, z, zs=y, zdir='y', alpha=0.8) 

ax.set_xlabel('biopsies') 
ax.set_ylabel('radius of biopsy') 
ax.set_zlabel('Shannon Index') 

plt.show()