2016-12-19 3 views
2

3 개의 매개 변수를 몬테 카를로 역전 (Monte Carlo inversion)을 수행했으며, 이제는 Matplotlib을 사용하여 3 차원 그림으로 플롯하려고합니다. 이러한 매개 변수 중 하나 (Mo)는 대략 10^15 ~ 10^20 사이의 값의 가변성을 가지며 10^17에서 10^19까지 다양하게 변하는 좋은 솔루션 (파란색 점)을 플로팅하는 데 관심이 있습니다. z 축에 매개 변수 (Mo)를 플로팅하고 있으며이 축에만 중요한 값의 범위와 함께 로그를 설정하는 것이 좋습니다. 나는 다른 포럼에서 본 다른 옵션을 시도했지만 줄거리가 제대로 작동하지 않습니다 ... 아마도 Matplotlib에 버그가 있거나 명령을 올바르게 사용하지 않았습니다.Matplotlib의 z 축 스케일링 및 한계

이 선형 축과 상기 z 축 제한없이 원래 도면이다 : I는 (라인 ax.set_zscale('log') 추가하여) 대수로 Z 축을 설정하려고하면 enter image description here

를 생성 스케일링하지 않는다 각 전력의 순서가 균등하지 않기 때문에 제대로 작동하는 것처럼 보입니다. enter image description here

마지막으로, 관심있는 값의 범위로 z 축을 제한하려고하면 ax.set_zlim3d(1e17,1e19)), 도트를이 축에서 정의 된 범위로 자르지 않고 f 그래프 롬 : enter image description here

이것은 특히이 그림의 전체 코드입니다. 그것은 복잡하지 않습니다. 어떤 도움이나 조언도 대단히 환영 할 것입니다.

fig = figure(2) 
ax = fig.add_subplot(111, projection='3d') 

# Plot models: 
p = ax.scatter(Vr,Dm,Mo,c=misfits,vmin=0.3,vmax=1,s=2,edgecolor='none',marker='o') 
fig.colorbar(p, ticks=arange(0.3,1+0.1,0.1)) 

# Plot settings: 
ax.set_xlim3d(0,max(Vr)) 
ax.set_ylim3d(0,max(Dm)) 
ax.set_zlim3d(1e17,1e19) 
ax.set_zscale('log') 
ax.set_xlabel("$V_{r}$ [$km/s$]") 
ax.set_ylabel("$D_{max}$ [$m$]") 
ax.set_zlabel("$M_{o}$ [$Nm$]") 
ax.invert_xaxis() 
jet() 
title("Kinematic parameters and $M_{o}$") 

답변

1

이것은 아마도 this issue과 관련이 있습니다. 로그 배율로 z 대신 np.log10(z)을 그려 보는 것이 좋습니다.

fig = figure(2) 
ax = fig.add_subplot(111, projection='3d') 

# Plot models: 
p = ax.scatter(Vr,Dm,np.log10(Mo),c=misfits,vmin=0.3,vmax=1,s=2,edgecolor='none',marker='o') 
fig.colorbar(p, ticks=arange(0.3,1+0.1,0.1)) 

# Plot settings: 
ax.set_xlim3d(0,max(Vr)) 
ax.set_ylim3d(0,max(Dm)) 
ax.set_zlim3d(17,19) 
ax.set_xlabel("$V_{r}$ [$km/s$]") 
ax.set_ylabel("$D_{max}$ [$m$]") 
ax.set_zlabel("$M_{o}$ [$Nm$]") 
ax.invert_xaxis() 
jet() 
title("Kinematic parameters and $M_{o}$") 

가 나는 또한 tight_layout()를 사용하는 것이 좋습니다 : 당신은 당신의 코드를 변경 할 수 있습니다. 적어도 내 컴퓨터에서는 축 레이블이 없으면 올바르게 표시되지 않습니다. 답장을 보내

enter image description here

+0

감사 : 여기에 일부 가짜 데이터와 사진입니다! ... 몇 년 전의 버그 인 것 같습니다. 당분간, 당신의 제안은 훌륭한 대안이며, 그것은 나를 위해 일했습니다. 그러나, 나는 아직도 한계의 문제를 해결할 수 없다. z 축의 한계를 제한하면 경계 외부의 점이 제대로 잘리지 않습니다 (내 질문의 세 번째 그림에 표시됨). 다른 포럼을 살펴본 후에는 3D 플롯에 대한 오래된 버그 인 것 같습니다. 지금은 해답을 그리기 전에 한계 값을 벗어나는 모든 값을 수동으로 NaN으로 설정하는 것이 해결책입니다. –

관련 문제