Python matplotlib图形,带对数轴,但不带科学/指数符号

Python matplotlib图形,带对数轴,但不带科学/指数符号,python,matplotlib,plot,Python,Matplotlib,Plot,我正在制作一个图形,其中x轴的间距应为对数,但我希望手动设置记号标签,并且我希望记号标签以普通“%.2f”表示法显示,而不是指数表示法。基于的以下解决方案建议使用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)) xli

我正在制作一个图形,其中x轴的间距应为对数,但我希望手动设置记号标签,并且我希望记号标签以普通“%.2f”表示法显示,而不是指数表示法。基于的以下解决方案建议使用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)

因为您正在对轴的最小值和最大值进行硬编码,所以看起来您试图一次性创建图形,而不是通过编程来创建更一般的数据。在这种情况下,尤其是因为您已经获得了对x-XAI的引用,您可以将记号标签字符串放置在列表中并使用axis方法。一般来说,请参阅。

使用
ScalarFormatter
是完全可能的。然后,您需要确保没有显示如本问题所示的次要标签:

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

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()

谢谢贝内特,不过我想我一定是错误地执行了你的建议。以下操作不会产生所需的结果:ax.get_xaxis().set_ticklebels(('100','200','300','500'))。API/文档表明您是正确的,因此不要澄清我做错了什么。您需要一个长度等于刻度数的列表:
设置刻度标签([“100”、“200”、“100”、“200”、“1000”)
*
在Python的列表上工作,因此我会使用
设置滴答声标签([“100”,“200”]+[“”]*7+[“1000”])
。此外,当您
设置滴答声时,我认为这将
重新设置滴答声
,覆盖您先前调用
设置滴答声
的效果,如您的图形所示。这就是为什么勾号列表的长度不是4。是的,问题肯定是同时使用set_xlim。当我删除该行时,您的解决方案将非常有效。当该行存在时(无论它在序列中出现在何处),轴标签将被复制和重叠。xlim=ax.setxlim(1001000)xscale=ax.set_xscale('log')ax.set_xticks((100200300500))ax.set_xticklabels(['100','200','300','500'))ax xaxis.set_major_格式化程序(matplotlib.ticer.FormatStrFormatter('.1f'))