Python matplotlib定位器参数或集合定位器不工作

Python matplotlib定位器参数或集合定位器不工作,python,matplotlib,Python,Matplotlib,我正在尝试减少子批次中的轴标记数(每个轴的值不同,因此我无法手动设置标记),但其他答案(如或)不起作用。 我创建图形的语法是标准的,如下所示: fig = plt.figure(figsize=(7,9)) ax = fig.add_subplot(8,2,i+1) # I am plotting in a much larger loop, but I don't think there is anything wrong with the loop, because everything e

我正在尝试减少子批次中的轴标记数(每个轴的值不同,因此我无法手动设置标记),但其他答案(如或)不起作用。 我创建图形的语法是标准的,如下所示:

fig = plt.figure(figsize=(7,9))
ax = fig.add_subplot(8,2,i+1) # I am plotting in a much larger loop, but I don't think there is anything wrong with the loop, because everything else (axis limits, labels, plotting itself...) works fine.
为了减少Ytick的数量,我尝试了

ax = plt.locator_params(nbins=4, axis='y')
这引发了错误
TypeError:set_params()获得了意外的关键字参数“nbins”

我试过了

ax.yaxis.set_major_locator(plt.MaxNLocator(4))
这导致错误
AttributeError:'NoneType'对象没有属性'yaxis'

我不明白为什么我的子批次被认为是非类型。我怀疑这是问题的核心,但我看到的所有示例都具有相同的结构,即

fig = plt.figure()
ax = fig.add_subplot(111)
ax.yaxis.set_major_locator(plt.MaxNLocator(4))

它应该会起作用。那么为什么我的ax是非类型的呢?

问题在于:

ax = plt.locator_params(nbins=4, axis='y')
locator\u params
不返回
Axes
实例(实际上它不返回任何内容),因此在这一行中,您将
ax
重新指定为
None

我想你想把它改成:

ax.locator_params(nbins=4, axis='y')

然后它就可以正常工作了。

是的,
fig=plt.figure();ax=图add_子批次(111);ax.yaxis.set_major_locator(plt.MaxNLocator(3))
应该可以工作,在我的例子中也是如此。脚本中只有这些行吗?你是如何导入pyplot的?奇怪,在这种情况下,我正在实际绘制的东西肯定有一些看不见的错误,这会弄乱ax对象。以标准方式导入pyplot,
import matplotlib.pyplot as plt
,但不,脚本中并非只有这些行。为了绘制它们,需要大量的数据读取和处理。但即使我注释掉了所有其他内容,我仍然会得到相同的错误。我在一个循环中创建这些子包可能是个问题吗
对于枚举中的i,col(列列表):ax=fig.add_子图(8,2,i+1)
在这种情况下,我得到了
AttributeError:'NoneType'对象没有属性'locator\u params'
在这种情况下,您需要共享更多的代码,因为在到达该行之前,您必须有另一个正在修改
ax
的命令,问题的一部分是我说的是
ax=plt.plot(…)
,而不是
ax.plot(…)
——现在改变这个,
ax.yaxis.set\u major\u locator(plt.MaxNLocator(7))
不会抛出错误,甚至不会打印一些东西,尽管它没有给出我想要的刻度数
ax.locator_params(nbins=4,axis='y')
仍然给出相同的错误。哦,我有一个怀疑:MaxNLocator不能在对数刻度上工作,是吗?
MaxNLocator
不应该在对数刻度上工作,对吗。但它也不应该抛出错误,它不会显示任何记号。您可以使用日志定位器(base=10.0,subs=[1.0],numdecs=4,numticks=15)。