我对三个参数进行了蒙特卡罗反演,现在我试图用Matplotlib将它们绘制成三维图形。其中一个参数(Mo)的值在大约10^15到10^20之间变化,我对绘制从10^17到10^19变化的好解(蓝点)感兴趣。我正在绘制z轴中的参数(Mo),如果只将此轴设置为具有重要值范围的对数,那就太好了。我尝试了不同的选择,我看到在其他论坛,但情节不正常。。。可能Matplotlib中有一个bug,或者我没有正确使用这些命令。
这是具有线性轴且不限制z轴的原始图形:
如果我尝试将z轴设置为对数(通过添加线ax.set_zscale('log')),则结果缩放似乎无法正常工作,因为每个功率的顺序并非等距排列:
最后,如果我试图将z轴限制在我感兴趣的值的范围内(只需添加线ax.set_zlim3d(1e17,1e19)),而不是将点剪切到该轴中定义的范围内,它们似乎会从图形中消失:
这是这个图的全部代码。这并不复杂。任何帮助或建议都是非常欢迎的。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}$")