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

vzgqcmou  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(125)

我对三个参数进行了蒙特卡罗反演,现在我试图使用Matplotlib将它们绘制成三维图形。其中一个参数(Mo)的值在10^15到10^20之间变化,我感兴趣的是绘制好的解(蓝点),它在10^17到10^19之间变化。我将参数(Mo)绘制在z轴上,如果只将该轴设置为对数,则会更好。我尝试了在其他论坛上看到的不同选项,但情节不能正常工作。..可能是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}$")
sbdsn5lh

sbdsn5lh1#

这可能与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()。至少在我的机器上,没有它,轴标签不能正确显示。下面是一些假数据的图片:

相关问题