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 축을 설정하려고하면
를 생성 스케일링하지 않는다 각 전력의 순서가 균등하지 않기 때문에 제대로 작동하는 것처럼 보입니다.
마지막으로, 관심있는 값의 범위로 z 축을 제한하려고하면 ax.set_zlim3d(1e17,1e19)
), 도트를이 축에서 정의 된 범위로 자르지 않고 f 그래프 롬 :
이것은 특히이 그림의 전체 코드입니다. 그것은 복잡하지 않습니다. 어떤 도움이나 조언도 대단히 환영 할 것입니다.
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}$")
감사 : 여기에 일부 가짜 데이터와 사진입니다! ... 몇 년 전의 버그 인 것 같습니다. 당분간, 당신의 제안은 훌륭한 대안이며, 그것은 나를 위해 일했습니다. 그러나, 나는 아직도 한계의 문제를 해결할 수 없다. z 축의 한계를 제한하면 경계 외부의 점이 제대로 잘리지 않습니다 (내 질문의 세 번째 그림에 표시됨). 다른 포럼을 살펴본 후에는 3D 플롯에 대한 오래된 버그 인 것 같습니다. 지금은 해답을 그리기 전에 한계 값을 벗어나는 모든 값을 수동으로 NaN으로 설정하는 것이 해결책입니다. –