python-3.x - 当使用 matplotlib.dates 时,Pandas Dataframe 图不显示日期
问题描述
我有以下代码,可以针对某些日期按国家/地区绘制 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()
在这里,我打算以 2 天的间隔显示 x 轴刻度上的日期,并以不同的样式格式化日期。但是,在图中,我没有在 x 轴上看到任何刻度和标签,如下图所示。
但是,当我用 注释掉说明时matplotlib.dates
,我会取回 x-ticks 和标签。
这可以用简单的方式解释和解决吗?另外,我们可以使用 得到相同的结果fig, ax = plt.subplots()
吗?
解决方案
你快到了。您需要做的就是重构您的数据框。索引日期。一种方法如下;
数据
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
粗略日期到日期时间
df2.set_index('Date', inplace=True)
在绘图前分组日期、国家和取消堆叠
df2.groupby([df2.index.date,df2['Countries']])['Count'].sum().unstack().plot.bar()
结果
推荐阅读
- rust - 为什么必须冗余指定指针特征边界?
- keras - 为什么 keras Batchnorm 中只有一个动量参数?
- jsf - 带分页的素人脸数据表,数据表放在Tab里面
- c++ - 在我的 C++ 冒泡排序代码中,当我按升序输入输入时,我的输出出现问题
- python - 如何使 json 解析检查代码更短或更易读?
- python - 相同的端点(Bing Visual Search API),但 Python 脚本和 PHP 脚本的结果不同
- typescript - 如何在 Typescript 中使用动态枚举器(上限量词数)克服枚举类型上的 TS2589
- python - Scrapy 不会在我的目录中写入文件,所以我看不到
- sql - 连接到 SQL Server 时等待操作超时
- javascript - 为什么警告框不运行?