Pandas График данных не показывает даты использования matplotlib.dates - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть следующий код, который графически отображает случаи, подтвержденные COVID-19, в сопоставлении с некоторыми датами.

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates



df = pd.DataFrame({'Countries': ['Australia', 'India', 'UAE',  'UK'],
                   '3/1/20':    [   27,        3,   21,    36],
                   '3/2/20':    [   30,        5,   21,    40],
                   '3/3/20':    [   39,        5,   27,    51],
                   '3/4/20':    [   52,        28,   27,    86],
                   },
                   index = [0, 1, 2, 3])

print('Datframe:\n')
print(df)

dft=df.T
print('\n Transposed data:\n')
print(dft)

print(dft.columns)
dft.columns=dft.iloc[0]
dft=dft[1:]
print('\n Final data:\n')
print(dft)


dft.plot.bar(align='center')

# Set date ticks with 2-day interval
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=2))

# Change date format
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))

''' Note: If I comment above two lines, I get back x-axis ticks. '''

# Autoformatting dates ticks
plt.gcf().autofmt_xdate()
plt.title('COVID-19 confirmed cases')

plt.show()

Здесь я намеревался показать даты на отметках оси X с 2-дневными интервалами и получить даты, отформатированные в другом стиле. Однако на графике я не вижу никаких отметок и меток на оси X, как показано на рисунке ниже.

enter image description here

Однако, когда я комментирую инструкции с помощью matplotlib.dates, я получаю обратно отметки и метки.

Можно ли это объяснить и исправить простым способом? Кроме того, можем ли мы получить тот же результат, используя fig, ax = plt.subplots()?

1 Ответ

0 голосов
/ 18 апреля 2020

Вы были почти там. Все, что вам нужно сделать, это реструктурировать ваш фрейм данных. индексировать дату. Один из способов сделать это заключается в следующем:

Данные

df = pd.DataFrame({'Countries': ['Australia', 'India', 'UAE',  'UK'],
                   '3/1/20':    [   27,        3,   21,    36],
                   '3/2/20':    [   30,        5,   21,    40],
                   '3/3/20':    [   39,        5,   27,    51],
                   '3/4/20':    [   52,        28,   27,    86],
                   },
                   index = [0, 1, 2, 3])
df2=df.set_index('Countries').T.unstack().reset_index()
df2#.plot(kind='bar')
df2.columns=['Countries','Date','Count']
df2['Date']=pd.to_datetime(df2['Date'])
df2.dtypes

Coarce date to datetime

df2.set_index('Date', inplace=True)

Дата группирования, страны и unstack перед построением графика

df2.groupby([df2.index.date,df2['Countries']])['Count'].sum().unstack().plot.bar()

Результат

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...