在matplotlib中,如何在刻度标记之间对齐x-刻度标签?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (89)

我想让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')
提问于
用户回答回答于

一种方法是使用小勾号。这个想法是,你设置小勾号,使它们位于主要勾号的中间,并且你手动指定标签。

例如:

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']))

这只是一个简单的例子。你可能想通过在循环中填充列表来简化它。

你也可以尝试其他定位器或格式器

或者:

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

例:

之前:

之后:

用户回答回答于

这里有一个替代使用定位器和ForMatters的方法。它可以用于标签之间的任何间隔:

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

所属标签

可能回答问题的人

  • gulu丶咕噜

    0 粉丝1 提问5 回答
  • EatRice

    16 粉丝0 提问4 回答
  • 华讯云

    0 粉丝0 提问4 回答
  • 卓脑域名

    0 粉丝0 提问3 回答

扫码关注云+社区

领取腾讯云代金券