繁体   English   中英

我怎样才能 plot 来自给定数据集中数据的一些图形?

[英]how can I plot some graphics from data in a given dataset?

我有一个包含 covid 病例数据的数据集。 链接如下

我有 3 个问题等待回答:

  • 病例数和每百万人死亡人数最多的前 10 个国家/地区的饼图。
  • 按大陆划分的病例和死亡率的 Stackplot 可视化。
  • 2020 年 3 月所有国家每天的冠状病毒病例数用折线图可视化。

我尝试了很多次,但我无法得出结论。 我使用 pandas 创建了 dataframe,但我无法绘制这 3 个图形/图表。 我可以根据需要通过过滤和分组来获得结果,但我无法将它们转换为图形。 感谢您的帮助。(如果您需要更多详细信息,我可以与您分享。)

1:

import requests
import matplotlib.pyplot as plt
import seaborn as sns
import seaborn.objects as so

url = r'https://covid.ourworldindata.org/data/owid-covid-data.csv'
with open('covid_data.csv', 'wb') as f:
    f.write(requests.get(url).content)

df = pd.read_csv('covid_data.csv')
df['date'] = pd.to_datetime(df['date'])

group_location_max = df.dropna(subset='continent').groupby(by=['location']).max()
top10_total_cases_per_milliion = group_location_max['total_cases_per_million'].sort_values(ascending=False).head(10)
top10_total_deaths_per_milliion = group_location_max['total_deaths_per_million'].sort_values(ascending=False).head(10)

def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return '{p:.2f}%  ({v:d})'.format(p=pct,v=val)
    return my_autopct

vals1 = top10_total_cases_per_milliion.values
vals2 = top10_total_deaths_per_milliion.values
ax1 = top10_total_cases_per_milliion.plot.pie(figsize=(10, 9), autopct=make_autopct(vals1), explode=np.ones((10))*0.1)
ax1.yaxis.set_label_coords(-0.15, 0.5)
plt.show()

ax2 = top10_total_deaths_per_milliion.plot.pie(figsize=(10, 9), autopct=make_autopct(vals2), explode=np.ones((10))*0.1)
ax2.yaxis.set_label_coords(-0.15, 0.5)
plt.tight_layout()
plt.show()

在此处输入图像描述

2:

total_cases_slice = df[['date', 'continent', 'total_cases']].dropna()
total_deaths_slice = df[['date', 'continent', 'total_deaths']].dropna()

s1 = so.Plot(total_cases_slice, x='date', y='total_cases', color='continent').add(so.Area(alpha=.5), so.Agg(), so.Stack()).layout(size=(8, 4))
s2 = so.Plot(total_deaths_slice, x='date', y='total_deaths', color='continent').add(so.Area(alpha=.5), so.Agg(), so.Stack()).layout(size=(8, 4))

s1.save('s1.png', bbox_inches='tight')                                                                                                                             
s2.save('s2.png', bbox_inches='tight') 

在此处输入图像描述 在此处输入图像描述

3:

total_cases_march = df[df.date.gt('2020-03-01') & df.date.le('2020-03-31') & df.continent.notna()][['date', 'location', 'total_cases']]
s3 = sns.lineplot(data=total_cases_march, x='date', y='total_cases', hue='location')
plt.legend(bbox_to_anchor=(2.04, 1), loc="upper right")
for tick in s3.get_xticklabels():
    tick.set_rotation(45)
plt.show()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM