Возможно, последняя версия pandas не установлена. В моей системе с pandas 1.0.3 x-метки отображаются как [2017-06-01 00:00:00, 0]
. Установка поворота метки с помощью df.plot(marker='*', rot=30)
делает так, чтобы они не перекрывались.
Но в любом случае, это не очень приятный вывод. (Я предполагаю, что столбец «Дата» имеет формат даты pandas. Если он имеет формат строки, результат будет аналогичным, без 00:00:00
.)
В любом случае, путь к go будет объединять столбцы даты и часа в один столбец даты и времени. Вот возможный подход:
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
# first create a dataframe similar to the example
days = pd.date_range('2017-06-01', '2017-06-03', freq='D')
df = pd.DataFrame({'Date': np.repeat(days, 24),
'Hour': np.tile(np.arange(0, 24), len(days)),
'NumTweets': np.random.binomial(10000, 0.2, 24 * len(days))})
df.set_index(['Date', 'Hour'], drop=True, inplace=True)
# df.plot(marker='*', rot=30) # this would be the plot from the question
df.reset_index(inplace=True) # remove the index, making 'Date' and 'Hour' regular columns
# create a new column combining 'Date' and 'Hour'
df['Time'] = pd.to_datetime(df['Date'].dt.strftime('%Y-%m-%d') + ' ' + df['Hour'].astype(str).str.zfill(2))
# use the new column as index
df.set_index('Time', drop=True, inplace=True)
# as the 'Date' and 'Hour' columns are still there, indicate we only want to plot the 'NumTweets' column
df.plot(y='NumTweets', marker='*', rot=20) # rot=0 would also work, depending on the figure width
plt.tight_layout() # make space to show the labels
plt.show()
Обратите внимание, что pandas адаптирует вашу ось X в зависимости от количества отображаемых дней. Всего через 3 дня в 00:00 ч будут «основные» отметки, а в 12:00 - «второстепенные». При большем количестве дней тиковых часов не будет.