matplotlib:在次要标签下绘制主要刻度标签

2024-05-11

这看起来应该很容易 - 但我不知道该怎么做:

我有一个 X 轴上有时间的图。我想设置两组刻度,小刻度显示一天中的小时,大刻度显示日/月。所以我这样做:

# set date ticks to something sensible:
xax = ax.get_xaxis()
xax.set_major_locator(dates.DayLocator())
xax.set_major_formatter(dates.DateFormatter('%d/%b'))

xax.set_minor_locator(dates.HourLocator(byhour=range(0,24,3)))
xax.set_minor_formatter(dates.DateFormatter('%H'))

这可以标记刻度,但主要刻度标签(日/月)绘制在次要刻度标签之上:

如何强制将主要刻度标签绘制在次要刻度标签下方?我尝试在 DateFormatter 中添加换行转义字符 (\n),但这是一个糟糕的解决方案,因为垂直间距不太正确。

任何意见,将不胜感激!


您可以使用axis method set_tick_params()与关键字pad。比较下面的例子。

import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as dates

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(100)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

ax = plt.gca()
# set date ticks to something sensible:
xax = ax.get_xaxis()
xax.set_major_locator(dates.DayLocator())
xax.set_major_formatter(dates.DateFormatter('%d/%b'))

xax.set_minor_locator(dates.HourLocator(byhour=range(0,24,3)))
xax.set_minor_formatter(dates.DateFormatter('%H'))
xax.set_tick_params(which='major', pad=15)

plt.show()

PS: 这个例子是借用的哞哞哞 https://stackoverflow.com/questions/1574088/plotting-time-in-python-with-matplotlib/16428019#16428019


以下是上面代码片段的渲染方式:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib:在次要标签下绘制主要刻度标签 的相关文章

随机推荐