我正在尝试在matplotlib图中自定义次要刻度。请考虑以下代码:
import pylab as pl
from matplotlib.ticker import AutoMinorLocator
fig, ax = pl.subplots(figsize=(11., 7.4))
x = [1,2,3, 4]
y = [10, 45, 77, 55]
errorb = [20,66,58,11]
pl.xscale("log")
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_minor_locator(AutoMinorLocator(2))
pl.tick_params(which='both', width=1)
pl.tick_params(which='minor', length=4, color='g')
pl.tick_params(axis ='both', which='major', length=8, labelsize =20, color='r' )
pl.errorbar(x, y, yerr=errorb)
#pl.plot(x, y)
pl.show()
据我所知,AutoMinorLocator(n)
应该在每个主要刻度之间插入n个小刻度,这就是线性刻度上发生的事情,但根本无法弄清楚次刻度位置背后的逻辑一个logscale。最重要的是,使用errorbar()
然后使用简单的plot()
时会有更多的小问题。
答案 0 :(得分:2)
AutoMinorLocator仅适用于线性比例:
<强> AutoMinorLocator 强>
小轴刻度线的定位器当轴线性且主刻度线均匀分布时。它将主要的时间间隔细分为指定数量的次要时间间隔,默认为4或5,具体取决于主要时间间隔。
AutoMinorLocator
documentation:
根据主要蜱的位置动态查找次要蜱位置。 假设比例为线性,主要比例均匀分布。
您可能希望将LogLocator
用于您的目的。
例如,要将主刻度线放在基数10中,并在地块上放置2和5的小刻度线(或每个base*i*[2,5]
),您可以:
ax.xaxis.set_major_locator(LogLocator(base=10))
ax.xaxis.set_minor_locator(LogLocator(base=10,subs=[2.0,5.0]))
ax.yaxis.set_minor_locator(AutoMinorLocator(2))