Я пытаюсь построить гистограмму из столбца pandas
DataFrame, 'Time'
, который имеет основные отметки каждый день и второстепенные каждый час, с метками для обоих с разными значениями смещения.
Пока что у меня есть
import datetime
import random
import dateutil.parser
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
start = dateutil.parser.parse("1 January 2019")
end = dateutil.parser.parse("3 January 2019")
data = [start + (end - start) * random.random() for _ in range(1000)]
df = pd.DataFrame(data, columns=['Time'])
fig, ax = plt.subplots(1, 1)
ax.hist(df['Time'], bins=mdates.drange(start, end, datetime.timedelta(hours=1)))
ax.xaxis.set_major_locator(mdates.DayLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%y'))
ax.xaxis.set_minor_locator(mdates.HourLocator())
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%H:%M'))
ax.xaxis.grid(True, which='minor')
ax.yaxis.grid(True)
ax.set_ylabel('Counts per hour')
fig.autofmt_xdate()
plt.tight_layout()
plt.show()
, что приводит к графику с перекрывающимися метками на оси X:

Полагаю, я мог бы увеличить расстояние между самими часовыми отметками, используя RRuleLocator
каждые 3 часа, скажем, вместо HourLocator
. Но как я могу предотвратить совмещение метки часа в полночь каждый день с меткой даты дня? Есть ли способ сместить эти два набора меток по вертикали?