Matplotlib次要标记

时间:2015-10-14 13:05:07

标签: python matplotlib

我正在尝试在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()时会有更多的小问题。

1 个答案:

答案 0 :(得分:2)

AutoMinorLocator仅适用于线性比例:

来自ticker documentation

  

<强> 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))

enter image description here