美文网首页
基于plotly的疫情数据可视化——线性图

基于plotly的疫情数据可视化——线性图

作者: syvince | 来源:发表于2020-02-12 17:08 被阅读0次

    2019年末,2020伊始,一场突如其来的新冠状肺炎(NCP)疫情改变了中国,在本该辞旧迎新之时因一例不起眼的肺炎到现如今四万四千多人确认感染,短短数月,恍如大梦一场。疫情的情况发展揪着我们每个人的心。

    这是一场关乎我们所有人地战争,我们热切地讨论,谨慎地分析,为灾难中陨落地生命而痛惜,为医者地大无畏精神而感动,为一切人为地错误而义愤填膺,为我们能为之所做地点滴小事而不懈努力。在这片土地上,在哪些从素未谋面地面孔里,哪些义无反顾地背影里,希望滋生出勇气,因为冬天终将过去!

    接下来通过plotly进行绘制的疫情趋势图,通过疫情的趋势图能更直观的了解疫情的变化。

    plotly这个软件在国内的使用率似乎并不高,所以很多中文的相关资料都十分的匮乏,所以资料方面也不是很多这里放出plotly的官方python使用说明

    [Plotly Python Graphing Library​plot.ly
    (https://link.zhihu.com/?target=https%3A//plot.ly/python/)

    相关文件已上传至GitHub

    https://github.com/syvince/plotly-​github.com

    首先使用pandas模块,读取csv数据。(数据统计截至至2020/2/12 数据来源:丁香医生)


    image.png

    使用plotly模块并将文件存储为html格式,绘制折线图使用go.Scatter函数,指定x轴与y轴,通过domain使整体布局呈现垂直结构。

    import plotly as py
    import plotly.graph_objects as go
    import pandas as pd
    
    pyplt=py.offline.plot
    
    url="dat/NCP.csv"
    df=pd.read_csv(url)
    
    date=pd.date_range(start='22/1/2020',end='11/2/2020')
    
    figure= go.Figure()
    
    # 对绘图添加 traces
    trace1 = go.Scatter(x=date, y=df.confirmedCount,
                        marker=dict(color='#FFC125'),
                        mode = 'lines+markers',
                        name='确诊',
                        xaxis='x2', yaxis='y2')
    trace2 = go.Scatter(x=date, y=df.suspectedCount,
                        marker=dict(color='#FF0000'),
                        name='疑似',
                        mode = 'lines+markers',
                        xaxis='x2', yaxis='y2')
    trace3 = go.Scatter(x=date, y=df.curedCount,
                        marker=dict(color='#ADFF2F'),
                        name='治愈',
                        mode = 'lines+markers',
                        xaxis='x2', yaxis='y2')
    trace4 = go.Scatter(x=date, y=df.deadCount,
                        marker=dict(color='#1E1E1E'),
                        name='死亡',
                        mode = 'lines+markers',
                        xaxis='x2', yaxis='y2')
    trace5 = go.Scatter(x=date, y=df.confirmedRise,
                        marker=dict(color='#FFC125'),
                        mode = 'lines+markers',
                        name='新增确诊',
                        xaxis='x', yaxis='y')
    trace6 = go.Scatter(x=date, y=df.suspectedRise,
                        marker=dict(color='#FF0000'),
                        name='新增疑似',
                        mode = 'lines+markers',
                        xaxis='x', yaxis='y')
    trace7 = go.Scatter(x=date, y=df.curedRise,
                        marker=dict(color='#ADFF2F'),
                        name='新增治愈',
                        mode = 'lines+markers',
                        xaxis='x', yaxis='y')
    trace8 = go.Scatter(x=date, y=df.deadRise,
                        marker=dict(color='#1E1E1E'),
                        name='新增死亡',
                        mode = 'lines+markers',
                        xaxis='x', yaxis='y')
    
    figure.add_traces([trace1, trace2,trace3,trace4])
    figure.add_traces([trace5, trace6,trace7,trace8])
    figure['layout']['xaxis2'] = {}
    figure['layout']['yaxis2'] = {}
    
    figure.layout.yaxis.update({'domain': [0, .45]})
    figure.layout.yaxis2.update({'domain': [.6, 1.]})
    
    figure.layout.yaxis2.update({'title': '人数'})
    figure.layout.yaxis.update({'title': '人数'})
    figure.layout.xaxis2.update({'title': '日期'})
    figure.layout.xaxis.update({'title': '日期'})
    figure.layout.update({'height':900})
    figure.update_layout(
        title_text="疫情趋势图",   
    )
    figure.update_layout(
        hovermode="x",
        template="plotly_white",
    )
    
    pyplt(figure, filename='example.html', show_link=False)
    

    最后呈现效果如下

    image.png

    使用hovermode="x"了使得鼠标放置于一处时,将会显示该日期下的所有数据。


    image.png

    文章最后

    我们不是生活在一个和平地世界,而是幸运地生活在一个和平地国家,这场没有硝烟地战争,让我们认清了敌人以及制度地短板,也诞生了一批这个时代地英雄,也让世人见证中国速度,和国家凝聚力。
    我们有势必穿越漫长黑夜地绝心,也在积攒见到曙光与炽热光明地力量!

    相关文章

      网友评论

          本文标题:基于plotly的疫情数据可视化——线性图

          本文链接:https://www.haomeiwen.com/subject/wnecfhtx.html