为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

开满天机 2021-03-30 21:14:53
我想让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')
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

一种方法是使用较小的刻度线。这个想法是,您可以设置次要刻度线,使其位于主要刻度线之间的中间位置,然后手动指定标签。


例如:


import matplotlib.ticker as ticker


# a is an axes object, e.g. from figure.get_axes()


# Hide major tick labels

a.xaxis.set_major_formatter(ticker.NullFormatter())


# Customize minor tick labels

a.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 labels

a.set_xticklabels('')


# Customize minor tick labels

a.set_xticks([1.5,2.5,3.5,4.5,5.5],      minor=True)

a.set_xticklabels(['1','2','3','4','5'], minor=True)


查看完整回答
反对 回复 2021-04-02
?
达令说

TA贡献1821条经验 获得超6个赞

这是使用定位器和格式化程序的替代方法。它可以用于标签之间的任何间距:


# 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 grid

ax.grid(False)

由于这会修改主要刻度线,因此可能必须调整网格-取决于应用程序。也可以使用ax.twinx())解决此问题。这将导致在单独轴的相反侧上移动标签,但将保持原始网格不变,并提供两个网格,一个用于原始刻度,一个用于偏移。


编辑:


假设整数刻度线等距分布,这可能是最简单的方法:


ax.set_xticks([float(n)+0.5 for n in ax.get_xticks()])


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 927 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信