具有对数轴的matplotlib图但没有科学/指数表示法的刻度

时间:2017-07-31 15:01:54

标签: python matplotlib plot

我正在制作一个数字,其中x轴应该以对数间隔,但我想手动设置刻度标签,我希望刻度标签出现在普通的'%。2f'符号,而不是指数符号。以下基于Matplotlib - logarithmic scale, but require non-logarithmic labels的解决方案建议使用ScalarFormatter,但不适用于matplotlib 2.0:

x = np.logspace(2, 3, 100)
y = x

fig, ax = plt.subplots(1, 1)
xscale = ax.set_xscale('log')
ax.set_xticks((100, 200, 300, 500))
xlim = ax.set_xlim(100, 1000)

from matplotlib.ticker import ScalarFormatter
ax.get_xaxis().set_major_formatter(ScalarFormatter())

__=ax.plot(x, y)

enter image description here

2 个答案:

答案 0 :(得分:3)

确实可以使用ScalarFormatter。然后,您需要确保没有显示此问题中显示的小标记标记:Matplotlib: setting x-limits also forces tick labels?

在您的情况下,代码将如下所示:

import matplotlib.pyplot as plt
import numpy as np

x = np.logspace(2, 3, 100)
y = x

fig, ax = plt.subplots(1, 1)
xscale = ax.set_xscale('log')
ax.set_xticks((100, 200, 300, 500))
xlim = ax.set_xlim(100, 1000)

import matplotlib.ticker

ax.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.get_xaxis().set_minor_formatter(matplotlib.ticker.NullFormatter())

__=ax.plot(x, y)

plt.show()

enter image description here

答案 1 :(得分:2)

因为您正在对轴的最小值和最大值进行硬编码,所以看起来您正在尝试一次性创建图形而不是以编程方式创建更一般的数据。在这种情况下,特别是因为您已经获得了对x-xais的引用,您可以将tick标签字符串放在列表中并使用轴方法set_ticklabels。一般来说,请参阅API for axis and tick objects