Форматирование оси DateTime на моем графике (Python)

Я пытаюсь изменить формат даты и времени на дд-мм или мм-дд, но не знаю, как это сделать. Я просмотрел другие вопросы и ответы о переполнении стека, но я думаю, что, возможно, я сделал свой график немного иначе, чем они, поскольку я вычисляю сумму для каждого из разных дней.

data = {'date': ['2020-09-01', '2020-09-02', '2020-09-03', '2020-09-04', '2020-09-01'],
    'newcases': [1, 2, 4, 7, 10]}

df = pd.DataFrame(data, columns = ['date','newcases'])

df['date'] = pd.to_datetime(df['date']) #converted to datetime

import matplotlib.dates as mdates
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m'))
df.groupby('date').newcases.sum().plot(kind = 'bar')

Это то, что я пробовал, но я не могу отформатировать x-галочки в правильном формате (дд-мм). Это все еще выглядит так:

Что вы пробовали? Можете ли вы предоставить минимальный воспроизводимый пример? (в идеале текст/код, а не скриншот)

FObersteiner 25.12.2020 21:29

Я только что изменил исходный вопрос на образец фрейма данных. Любая помощь, которую вы можете предложить, будет высоко оценена! Я пытаюсь выучить Python и взял образец набора данных COVID-19 для практики :)

MWong 25.12.2020 22:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Pandas создает новую фигуру/оси при построении графика (если вы не передадите ему объект осей). Таким образом, вам нужно сначала построить график, а затем изменить средство форматирования оси графика, который вы только что создали (gca = получить текущие оси), то есть просто изменить порядок последних двух строк кода:

df.groupby('date').newcases.sum().plot(kind = 'bar')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m'))

Привет, я пробовал это раньше, но я получаю сообщение об ошибке. Ошибка: «DateFormatter обнаружил значение x = 0, что является недопустимой датой; обычно это происходит из-за того, что вы не сообщили оси, что она отображает даты, например, с помощью ax.xaxis_date()'

MWong 26.12.2020 16:27

Какую версию Панды вы используете? Ваш пример отлично работает с измененным порядком для pandas 1.1.3 и matplotlib 3.3.0, см. прикрепленное изображение в ответе.

Stef 26.12.2020 16:59

для более старых версий панд вы можете использовать df.groupby(df['date'].dt.strftime('%d-%m')).newcases.sum().p‌​lot(kind = 'bar')

Stef 26.12.2020 18:18

Ах, большое спасибо, я только что обновил свой Anaconda Navigator, и теперь он работает. Я не осознавал, что, возможно, я использовал гораздо более старую версию Anaconda!

MWong 28.12.2020 15:43

Другие вопросы по теме