10

这似乎应该很容易 - 但我不知道该怎么做:

我在 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),但这是一个糟糕的解决方案,因为垂直间距不太正确。

任何意见,将不胜感激!

4

1 回答 1

20

您可以使用带关键字的axis方法。比较以下示例。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:这个例子是从moooeeeep借来的


以下是上述代码段的呈现方式:

在此处输入图像描述

于 2013-07-18T09:31:59.250 回答