我对三个参数进行了蒙特卡罗反演,现在我正尝试使用 Matplotlib 在 3-D 图形中绘制它们。其中一个参数 (
Mo
) 的值大约在 10^15 和 10^20 之间变化,我有兴趣绘制好的解决方案(蓝点),从 10^17 到 10^19 不等。我在 z 轴上绘制参数 (Mo
),最好仅将此轴设置为与重要值范围成对数。我尝试了在其他论坛上看到的不同选项,但情节无法正常工作......也许 Matplotlib 中存在错误,或者我没有正确使用命令。
如果我尝试将 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}$")
这可能与this issue有关。建议使用对数刻度绘制
np.log10(z)
而不是 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()
。至少在我的机器上,轴标签没有它就无法正确显示。这是带有一些假数据的图片: