Matplotlib

时间:2016-12-19 03:12:28

标签: python matplotlib plot

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

这是带有线性轴且不限制z轴的原始图形: enter image description here

如果我尝试将z轴设置为对数(通过添加线ax.set_zscale('log')),则生成的缩放似乎不能正常工作,因为每个幂的排序不是等间隔的: enter image description here

最后,如果我尝试将z轴限制在我感兴趣的值范围内(通过简单地添加线ax.set_zlim3d(1e17,1e19)),而不是将点切割到此轴中的定义范围,他们似乎从图中掠过: enter image description here

这是该图的完整代码。这并不复杂。我们非常欢迎任何帮助或建议。

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}$")

1 个答案:

答案 0 :(得分:2)

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

enter image description here