Python 设置带有对数刻度的XTICK会导致一些重叠标签

Python 设置带有对数刻度的XTICK会导致一些重叠标签,python,matplotlib,Python,Matplotlib,下面是我的系统(Python 3.5.3,matplotlib 2.0.2)上的最简单的工作示例,它引出了代码片段后面的图像: import matplotlib.ticker from matplotlib import pyplot as plt npts = [2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0] error = [0.0005650356236921, 1.9222448391e-06, 1.05166913e-08,

下面是我的系统(Python 3.5.3,matplotlib 2.0.2)上的最简单的工作示例,它引出了代码片段后面的图像:

import matplotlib.ticker
from matplotlib import pyplot as plt

npts = [2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0]
error = [0.0005650356236921, 1.9222448391e-06, 1.05166913e-08,
         6.92182e-11, 5.029e-13, 3.8e-15, 4e-16, 2e-16]

fig1, ax1 = plt.subplots()
ax1.plot(npts, error , 'ro')

ax1.set_xscale('log')
ax1.set_yscale('log')

ax1.set_xticks(npts)
ax1.get_xaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())
plt.show()

请注意,标签3 x 10^0根本不应该在那里。此外,2和4个标签已被不需要的2 x 10^0和4 x 10^0标签重叠

如果我通过删除

ax1.set_xscale('log')
例如,从下图中可以看到:


为什么会发生这种情况以及如何解决?

您不需要这一行
ax1.setxscale('log')
。原因是数据点不是对数的。

这并不能回答问题。@Oluwafemi Sule:任何数据点集(x,y)都可以使用不同的图形表示,具体取决于您的目的。您可以直接绘制(x,y)点;或者你可以画(f(x),g(y)),只要x在f的域中,y在g的域中。在我的例子中,我有f:=log和g:=log。数据就是这样,数据。我们选择如何表达和解释它。@Omid你是对的。重要的是,贝格纳斯特的回答确实很有启发性。我看到了格式化标签的全新可能性。这些附加标签来自次要标签。您需要在轴上强制执行
matplotlib.ticker.NullFormatter()
,请参见的答案。@ImportanceOfBeingErnest:谢谢。我在Stackoverflow上做了很多搜索,但没有找到您链接到的问题。我确认强制使用matplotlib.ticker.NullFormatter()可以解决问题。不过我很困惑。这种行为从matplotlib 1.5.x更改为2.0.y是非常违反直觉的。你知道这是为什么吗?