求助:基于COVID-19数据集绘制三类可视化图表的方法
COVID-19数据集可视化解决方案
假设你的DataFrame命名为df,以下是针对三项需求的具体实现代码,基于pandas和matplotlib完成:
1. 百万人口病例数/死亡数Top10国家饼图
先筛选各国最新的累计数据(排除大洲汇总行),再提取Top10数据绘制双饼图:
import pandas as pd import matplotlib.pyplot as plt # 提取各国最新的百万人口累计数据 country_latest = df[df['continent'].notna()].groupby('location').last() # 获取Top10国家的百万人口病例数与死亡数 top10_cases = country_latest['total_cases_per_million'].sort_values(ascending=False).head(10) top10_deaths = country_latest['total_deaths_per_million'].sort_values(ascending=False).head(10) # 绘制双饼图 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8)) # 病例数饼图 ax1.pie(top10_cases, labels=top10_cases.index, autopct='%1.1f%%', startangle=90) ax1.set_title('Top10国家百万人口累计病例数') # 死亡数饼图 ax2.pie(top10_deaths, labels=top10_deaths.index, autopct='%1.1f%%', startangle=90) ax2.set_title('Top10国家百万人口累计死亡数') plt.tight_layout() plt.show()
2. 各大洲病例率与死亡率堆叠图
按大洲分组汇总最新数据,绘制堆叠柱状图展示病例率与死亡率的对比:
# 提取各大洲最新的百万人口病例率与死亡率 continent_latest = df[df['continent'].notna()].groupby('continent').last()[['total_cases_per_million', 'total_deaths_per_million']] # 绘制堆叠柱状图 continent_latest.plot(kind='bar', stacked=True, figsize=(12, 6)) plt.title('各大洲百万人口病例率与死亡率堆叠图') plt.xlabel('大洲') plt.ylabel('每百万人口数值') plt.legend(['病例率', '死亡率']) plt.xticks(rotation=45) plt.tight_layout() plt.show()
3. 2020年3月全球各国每日新冠病例数折线图
筛选2020年3月的数据,提取新增病例较多的Top10国家绘制多折线图(避免折线过多导致混乱):
# 转换日期格式(若未转换) df['date'] = pd.to_datetime(df['date']) # 筛选2020年3月的国家数据(排除大洲汇总) march_data = df[(df['date'].between('2020-03-01', '2020-03-31')) & (df['continent'].notna())] # 选取3月累计新增病例Top10的国家 top_march_countries = march_data.groupby('location')['new_cases'].sum().sort_values(ascending=False).head(10).index # 提取目标国家数据并绘图 plt.figure(figsize=(14, 7)) for country in top_march_countries: country_daily = march_data[march_data['location'] == country] plt.plot(country_daily['date'], country_daily['new_cases'], label=country) plt.title('2020年3月各国每日新增新冠病例数') plt.xlabel('日期') plt.ylabel('每日新增病例数') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.xticks(rotation=45) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Tolga Dönmez
相关产品推荐
相关产品推荐

