轴标度不会随matplotlib而改变

时间:2017-06-09 15:18:59

标签: python matplotlib

我正在尝试使用matplotlib绘制以下x值:

[1.1e19, 5.6e31, 1.1e32, 1.6e32, 2.2e32, 2.8e32]

但是,因为我的第一个x值相对于其他x值非常小,所以matplotlib给出了以下内容 autoscaled x-axis。 我的第一点在于y轴。我希望这一点更加明显。

我试过了:

ax.set_xlim(1e16, 1e36)
ax.set_xlim(xmin=1e16, xmax=1e36)
ax.set_xbound(lower=1e16, upper=1e36)

无济于事。我能够改变我的x轴的上限,但从不改变下限。

修改 对于那些要求示例代码的人来说,这正是我正在运行的:

dose = np.array([1.1e19, 5.6e31, 1.1e32, 1.6e32, 2.2e32, 2.8e32])
counts = np.array([46, 31, 15, 16, 14, 13])

plt.rcParams['axes.formatter.useoffset'] = False 
fig, ax = plt.subplots()
ax.plot(dose, counts, 'ob-')
ax.set_xlim(1e16, 1e36)
#ax.set_xlim(xmin=1e16, xmax=1e36)
#ax.set_xbound(lower=1e16, upper=1e36)

fig.tight_layout()
plt.show()

2 个答案:

答案 0 :(得分:2)

好消息,坏消息......

您的代码实际上正在运行。如果您查看值ax.get_xlim(),您将看到您设置的边界。

(使用Spyder / Ipython进行一些快速测试)

以下两个屏幕截图是您的图表...线性轴和日志轴。 linear example log example

因此看起来matplotlib对使用线性轴可以查看的范围的大小/比例有限制。所有小于上边界小三或四个数量级的数据都会被压缩,以便在y轴上看起来正确

坏消息是,我无法为这一挑战提供实际的解决方案......只是你没有做任何不正确的事情。也许这是一个错误?我建议在matplotlib github page上打开一个问题,看看是否有更复杂的解决方案或其中一个开发人员有想法。

**注意:不是错误......但是仍然会留给开发团队链接

如果您的上限是1e32,则在@PaulH之后: 1e31绘制在0.1
1e30绘制在0.01
1e29绘制在0.001
...
1e16绘制在0.0000000000000001

与你的下边界无关。

因此它不是一个错误,即使下限为1e16,你也总会在不知不觉中将这一点放在y轴附近......

答案 1 :(得分:2)

省略限制设置将是一个选项。以下代码

import matplotlib.pyplot as plt
import numpy as np

dose = np.array([1.1e19, 5.6e31, 1.1e32, 1.6e32, 2.2e32, 2.8e32])
counts = np.array([46, 31, 15, 16, 14, 13])

fig, ax = plt.subplots()
ax.plot(dose, counts, 'ob-')

fig.tight_layout()
plt.show()

产生这个数字:

enter image description here

对我来说很好看。

当然,如果您愿意,可以更改轴限制。例如。使用

ax.set_xlim(xmin=-1e32, xmax=5e32)

会导致

enter image description here