在matplotlib中的刻度线之间使x-tick标签居中

我想让x-tick日期标签居中于刻度线之间,而不是如以下照片所示,以刻度线为中心。


我已经阅读过文档,但无济于事-有人知道这样做的方法吗?


如果有帮助,这是我用于x轴刻度格式的所有内容:


day_fmt = '%d'   

myFmt = mdates.DateFormatter(day_fmt)

ax.xaxis.set_major_formatter(myFmt)    

ax.xaxis.set_major_locator(matplotlib.dates.DayLocator(interval=1))     


for tick in ax.xaxis.get_major_ticks():

    tick.tick1line.set_markersize(0)

    tick.tick2line.set_markersize(0)

    tick.label1.set_horizontalalignment('center')


开满天机
浏览 928回答 3
3回答

DIEA

一种方法是使用较小的刻度线。这个想法是,您可以设置次要刻度线,使其位于主要刻度线之间的中间位置,然后手动指定标签。例如:import matplotlib.ticker as ticker# a is an axes object, e.g. from figure.get_axes()# Hide major tick labelsa.xaxis.set_major_formatter(ticker.NullFormatter())# Customize minor tick labelsa.xaxis.set_minor_locator(ticker.FixedLocator([1.5,2.5,3.5,4.5,5.5]))a.xaxis.set_minor_formatter(ticker.FixedFormatter(['1','2','3','4','5']))三行:“隐藏”主要刻度线上的1,2,3,4,...在主要刻度之间的中间设置次要刻度(假设您的主要刻度为1,2,3 ...)手动指定小刻度线的标签。在此,图中的“ 1”将介于1.0和2.0之间。这只是一个简单的例子。您可能希望通过循环填充列表或其他方式来简化它。您还可以尝试其他定位器或格式化程序。编辑:或者,如注释中所建议:# Hide major tick labelsa.set_xticklabels('')# Customize minor tick labelsa.set_xticks([1.5,2.5,3.5,4.5,5.5],      minor=True)a.set_xticklabels(['1','2','3','4','5'], minor=True)

达令说

这是使用定位器和格式化程序的替代方法。它可以用于标签之间的任何间距:# tick_limit: the last tick position without centering (16 in your example)# offset: how many steps between each tick (1 in your example)# myticklabels: string labels, optional (range(1,16) in your example)# need to set limits so the following works:ax.xaxis.set_ticks([0, tick_limit]) # offset all ticks between limits:ax.xaxis.set(ticks=np.arange(offset/2., tick_limit, offset), ticklabels=myticklabels)# turn off gridax.grid(False)由于这会修改主要刻度线,因此可能必须调整网格-取决于应用程序。也可以使用ax.twinx())解决此问题。这将导致在单独轴的相反侧上移动标签,但将保持原始网格不变,并提供两个网格,一个用于原始刻度,一个用于偏移。编辑:假设整数刻度线等距分布,这可能是最简单的方法:ax.set_xticks([float(n)+0.5 for n in ax.get_xticks()])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python