Matplotlib 中 3-D 散点图中的 z 轴缩放和限制

Car*_*era 6 python plot matplotlib

我对三个参数进行了蒙特卡罗反演,现在我正在尝试使用 Matplotlib 在 3-D 图中绘制它们。其中一个参数 ( Mo) 的值变化大约在 10^15 和 10^20 之间,我有兴趣绘制从 10^17 到 10^19 不等的良好解决方案(蓝点)。我Mo在 z 轴上绘制参数 ( ),并且仅将此轴设置为具有重要值范围的对数会很好。我尝试了在其他论坛上看到的不同选项,但情节无法正常工作......也许 Matplotlib 中存在错误,或者我没有正确使用命令。

这是带有线性轴且不限制 z 轴的原始图形: 在此处输入图片说明

如果我尝试将 z 轴设置为对数(通过添加线ax.set_zscale('log')),则结果缩放似乎无法正常工作,因为每个幂的顺序不是等距的: 在此处输入图片说明

最后,如果我尝试将 z 轴限制在我感兴趣的值范围内(通过简单地添加 line 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}$")
Run Code Online (Sandbox Code Playgroud)

Mah*_*hdi 5

这可能与这个问题有关。建议绘图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}$")
Run Code Online (Sandbox Code Playgroud)

我也建议使用tight_layout(). 至少在我的机器上,没有它就无法正确显示轴标签。这是带有一些假数据的图片:

在此处输入图片说明