使用python(matplotlib,seaborn或plotly)将全球COVID-19演变绘制成线

Henrique Junior

作为练习,我试图绘制Johns Hopkins CSSE提供的出色的COVID-19数据我很困惑,因为时间序列是按列组织的(每一天都放在另一侧...请参见下图)。优选地,我想避免将列转换为行,反之亦然。我的意图是将COVID-19的演变逐日绘制为所有国家/地区的线条(是的,它会变得混乱)。

我当时想我可以使用for循环遍历各列来填充列表并将其用作我的y轴,但是我们是否有更“直接”的方式来获得该图?最近,我更多地使用了Plotly,但是我也可以使用matplotlib或seaborn。

在此处输入图片说明

背心

我认为该特定数据集不太适合plotly.express首选的长数据格式。特别是因为对的许多遗漏的观察Province / State由于您的意图是

逐日绘制所有国家的COVID-19演变曲线

...有没有需要Province / StateLatLon因此,我只需要汇总每个国家/地区的数据,并使用go.Scatter每个国家/地区的跟踪记录即可。不,它不会太混乱,因为您可以轻松地选择迹线或将焦点集中在字符的不同部分,因为我们在这里使用了plotly的强大功能。无论如何,我希望设置能够满足您的喜好。如果您还有其他需要,请随时告诉我。

情节:

在此处输入图片说明

放大的图:

在此处输入图片说明

编辑-版本2:从首次出现起经过几天的开发

一种使绘图变少麻烦的方法是,测量每个区域从第一次出现的第一天起的发展情况,如下所示:

在此处输入图片说明

为了生成第一个图,只需将数据复制到链接中,然后将其存储covid.csv在名为的文件夹中即可c:\data

第一个情节的完整代码:

import os
import pandas as pd
import plotly.graph_objects as go

dfi = pd.read_csv(r'C:\data\covid.csv',sep = ",", header = 0)

# drop province, latitude and longitude
df = dfi.drop(['Province/State', 'Lat', 'Long'], axis = 1)

# group by countries
df_gr = df.groupby('Country/Region').sum()#.reset_index()

time = df_gr.columns.tolist()
df_gr.columns = pd.to_datetime(time)
df_gr.reset_index(inplace = True)

# transpose df to get dates as a row index
df = df_gr.T

# set first row as header
new_header = df.iloc[0] #grab the first row for the header
df = df[1:] #take the data less the header row
df.columns = new_header #set the header row as the df header

# order df columns descending by country with most cases
df_current = df.iloc[-1].to_frame().reset_index()
df_sort = df_current.sort_values(df_current.columns[-1], ascending = False)# plotly setup
order =  df_sort['Country/Region'].tolist()
df = df[order]

fig = go.Figure()

# add trace for each country
for col in df.columns:
    #print(col)
    fig.add_trace(go.Scatter(x=df.index, y=df[col].values, name=col))
fig.show()

最后一个情节的代码:

这基于代码片段1中的df:

# replace leading zeros with nans
df2= df.replace({'0':np.nan, 0:np.nan})

# shift leading nans, leaving
# nans in the last rows for some
# regions
df2=df2.apply(lambda x: x.shift(-x.isna().sum()))
df2.reset_index(inplace=True)
df2=df2.drop('index', axis = 1)

fig2 = go.Figure()

# add trace for each country
for col in df2.columns:
    fig2.add_trace(go.Scatter(x=df2.index, y=df2[col].values
                              , name=col
                             ))
fig2.update_layout(showlegend=True)
fig2.update_layout(xaxis=dict(title='Days from first occurence'))
fig2.show()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用pyevolve和matplotlib绘制最佳价值演变图

来自分类Dev

将图像绘制成形状?

来自分类Dev

使用 lsqnonlin 绘制所有迭代期间的函数值演变

来自分类Dev

使用UIPinchGeustureRecognizer绘制线

来自分类Dev

使用UIPinchGeustureRecognizer绘制线

来自分类Dev

在Gnuplot中绘制COVID-19数据

来自分类Dev

如何将字符串绘制成图像?

来自分类Dev

将内切圆绘制成阈值图像

来自分类Dev

将点(纬度和经度)绘制成 ggmap

来自分类Dev

如何使用Matplotlib绘制圆线末端

来自分类Dev

在Python中绘制趋势线

来自分类Dev

回归线绘制 Python

来自分类Dev

使用uibezierPath垂直绘制线

来自分类Dev

使用VBO绘制线串

来自分类Dev

使用CGPath的MKOverlayRenderer绘制线

来自分类Dev

使用 GNUPLOT 绘制误差线

来自分类Dev

使用 MITK 绘制点/线

来自分类Dev

如何使用seaborn绘制将直方图条围绕刻度线居中?堆叠条是必不可少的

来自分类Dev

用于绘制图表演变的Python脚本,例如Paraview

来自分类Dev

使用Seaborn FacetGrid从数据框中绘制误差线

来自分类Dev

使用lineplot用seaborn绘制两条线

来自分类Dev

使用Seaborn将较小的网格线添加到Matplotlib图中

来自分类Dev

使用Pandas Python绘制线X轴

来自分类Dev

如何在Python中使用Plotly Express在同一y轴上绘制多条线

来自分类Dev

是否可以使用Matlab(或其他工具)将图形绘制成图像?

来自分类Dev

使用 2 个数据集将数据绘制成折线图

来自分类Dev

使用 mplot3d 将数据绘制成框而不是金字塔的方法

来自分类Dev

Matplotlib在每个条上方绘制线

来自分类Dev

在matplotlib中绘制圆形轮廓线