如何在matplotlib配置文件中定义次刻度线数量

4

使用一个Locator()可以控制matplotlib轴上的次要或主要刻度线的数量。

例如:

plt.gca().yaxis.set_minor_locator(plt.MultipleLocator(1))

但是上述代码取决于您正在绘制的数据。
我想知道是否有一种方法可以从matplotlib样式文件(例如matplotlibrc)更改次刻度线的数量(https://matplotlib.org/users/customizing.html)。例如,您可以使用以下方式管理次刻度线样式:
xtick.minor.visible : True
xtick.minor.width   : 2
xtick.minor.size    : 5

但我不知道如何处理次刻度线的数量。


滴答数并不被视为“样式”属性。因此,您目前无法使用rc文件来处理它。 - ImportanceOfBeingErnest
是的,这是真的,但无论我的图表如何(没有对数轴),我总是在主刻度之间获得3个次刻度。因此,我想知道这个默认数字从哪里来。 - Ger
2个回答

2

使用

ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator(2))
ax.yaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator(2))

这里的ax是你的坐标轴,而2是次要刻度线的数量,你可以根据自己的喜好进行更改。


2

“刻度数”并不被认为是一种“样式”属性。因此,您目前无法使用rc文件进行操作。

至于默认设置来自何处,这取决于AutoMinorLocator,如果没有其他自定义定位器并且打开了次要刻度,则会使用它。

matplotlib.ticker.AutoMinorLocator(n=None)

根据主刻度位置动态查找次要刻度位置。比例必须是线性的,主要刻度必须均匀分布。

n是主刻度之间间隔的子区间数量;例如,n=2将在主刻度之间的中点放置一个单独的次要刻度。

如果省略或为None,则将其设置为5或4。

这留下了以下解决方法。您可以对AutoMinorLocator进行monkey patch以使用与通常不同的默认值。例如,要有23个小刻度,请执行以下操作:

# use these lines on top of your matplotlib script
import matplotlib.ticker
class MyLocator(matplotlib.ticker.AutoMinorLocator):
    def __init__(self, n=23):
        super().__init__(n=n)
matplotlib.ticker.AutoMinorLocator = MyLocator        
 

# Now use matplotlib as usual.       
import matplotlib.pyplot as plt
plt.rcParams["xtick.minor.visible"] =  True

plt.plot([1,2])
plt.show()

请注意,有一个错误,即在将 xtick.minor.visible 设置为 True 后,会使得 x 和 y 轴的次刻度线都可见。我已经提出了 修复方案 - ImportanceOfBeingErnest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接