Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在matplotlib配置文件中定义次刻度的数量_Python_Matplotlib - Fatal编程技术网

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

Python 如何在matplotlib配置文件中定义次刻度的数量,python,matplotlib,Python,Matplotlib,使用一个Locator()可以控制matplotlib轴上的次刻度或主刻度的数量 例如: plt.gca().yaxis.set_minor_locator(plt.MultipleLocator(1)) 但上面的线条取决于您正在绘制的数据 我想知道是否有办法更改matplotlib样式文件(如matplotlibrc())中的小刻度数。例如,可以使用以下工具管理次要记号样式: xtick.minor.visible : True xtick.minor.width : 2 xtick.m

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

例如:

plt.gca().yaxis.set_minor_locator(plt.MultipleLocator(1))
但上面的线条取决于您正在绘制的数据

我想知道是否有办法更改matplotlib样式文件(如
matplotlibrc
())中的小刻度数。例如,可以使用以下工具管理次要记号样式:

xtick.minor.visible : True
xtick.minor.width   : 2
xtick.minor.size    : 5

但是我不知道如何处理小刻度的数量。

刻度的数量并不是真正的“样式”属性。因此,您目前没有选择使用rc文件进行此操作

至于默认设置的来源,这是由确定的,如果没有提供其他自定义定位器并且启用了次刻度,则将使用

matplotlib.ticker.AutoMinorLocator(n=None)

根据主记号的位置动态查找次记号位置。刻度必须与等距的主刻度呈线性

n
是主刻度之间间隔的细分数;e、 例如,n=2将在主刻度之间放置一个小刻度

如果
n
被省略或无,则将其设置为5或4

这为下面的解决方案留下了空间。您可以对
AutoMinorLocator
进行猴子补丁,以使用与通常不同的默认值。例如,有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()
使用


其中,
ax
是轴,
2
是小刻度的数量,您可以根据自己的喜好进行替换。

刻度的数量实际上并不被视为“样式”属性。因此,您目前没有选择使用rc文件。是的,这是真的,但无论我的绘图(没有日志轴),我总是在主刻度之间获得3个小刻度。因此,我想知道这个默认数字是从哪里来的。不过请注意,有一个bug,它使得在将
xtick.minor.visible
设置为
True
时,x轴和y轴的次刻度都可见。我已经求婚了。
ax.xaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator(2))
ax.yaxis.set_minor_locator(matplotlib.ticker.AutoMinorLocator(2))