写点什么

一份数据的 6 种 Plotly 画法

作者:Peter
  • 2021 年 11 月 18 日
  • 本文字数:1648 字

    阅读完需:约 5 分钟

一份数据的6种Plotly画法

公众号:尤而小屋<br>作者:Peter<br>编辑:Peter


大家好,我是 Peter~


针对同一份数据,很多时候我们会用不同的图形来进行数据的展示,当然效果必然是不同的。


今天 Peter 带领大家来体会下不同图表的可视化表现能力,同时感受下 Plotly 的强大~最终会用 6 种不同的图形来展示:


  • 柱状图

  • 水平柱状图

  • 饼图

  • 旭日图

  • 桑基图

  • 矩形树状图



数据

数据介绍

这是一份模拟的数据。假设小明同学有这样的一份月度消费数据,体现在衣食住行 4 个方面。



为了后面的数据进一步处理的方便和绘图,我们把上面的原始数据稍加处理,变成了下面的样子,有三个不同的字段:一级、二级、金额。后面我们也会在 pandas 中导入这份处理后的数据。


数据导入

在 pandas 中导入数据,查看前 5 行:



我们增加一个新的字段:根节点


图 1:柱状图

直接使用 plotly_express 快速绘制柱状图


fig = px.bar(df,x="二级",y="金额",color="一级",text="金额")
fig.update_traces(textposition="outside")
fig.show()
复制代码



我们还可以采用堆叠 stack 的形式:


# 我们采用堆叠的形式
fig = px.bar(df,x="一级",y="金额",color="二级",text="金额",barmode="stack")
fig.update_traces(textposition="outside")
fig.show()
复制代码


图 2:水平柱状图

fig = px.bar(    df,    y="一级",   # xy轴的数据需要交换!!!    x="金额",    color="二级",    text="金额",    orientation='h'   # 设置:改成水平柱状图)
fig.update_traces(textposition="outside")
fig.show()
复制代码


图 3:饼图

fig = px.pie(df,names="二级",values="金额")
fig.show()
复制代码



改成显示数值而不是比例的饼图:


图 4:旭日图

1、使用 plotly_express 绘制的初级版本的旭日图,是没有数据显示的


fig = px.sunburst(df,path=["根节点","一级","二级"],values="金额")
fig.show()
复制代码



2、使用 plotly_graph_objects 绘制的旭日图


我们需要先把数据进行处理下:



绘图代码如下:


import plotly.graph_objects as go
fig =go.Figure(go.Sunburst( labels=df1["一级"].tolist() + df2["二级"].tolist(), parents=df1["根节点"].tolist() + df2["一级"].tolist(), values=df1["金额"].tolist() + df2["金额"].tolist(), branchvalues="total", text = df1["金额"].tolist() + df2["金额"].tolist()))fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))

fig.show()
复制代码


图 5:桑基图

为了绘制桑基图,数据还需要进行处理:


1、修改属性名称



2、合并数据



3、生成父类和子类的标签


labels = list((set(df3["父类"].tolist() + df3["子类"].tolist())))numbers = list(range(0,len(labels)))
复制代码



4、生成父类、子类的属性字段




5、绘图代码


import plotly.graph_objects as go
# 标签就是index字典中的key键label = list(index.keys())# 父类和子类source = df3["父类索引"].tolist()target = df3["子类索引"].tolist()# 流量的值value = df3["金额"].tolist()
# 生成绘图需要的字典数据link = dict(source = source, target = target, value = value)node = dict(label = label, pad=200, thickness=50)
data = go.Sankey(link = link, node=node)
fig = go.Figure(data)
fig.update_layout(title=dict(text="月度消费桑基图",x=0.5,y=0.95))fig.show()
复制代码


图 6:矩形树状图

1、基于 Plotly_express 绘制的桑基图


fig = px.treemap(    df,    path = [px.Constant("all"),"根节点","一级","二级"],    values = "金额",    color = "一级",)
fig.show()
复制代码



2、基于 plotly_graph_objects 绘制


一般情形下基于 plotly_graph_objects 绘制图形会有更多的参数选项


import plotly.graph_objects as go
fig =go.Figure(go.Treemap( labels= df3["子类"], parents=df3["父类"], values=df3["金额"], text = df3["金额"], textinfo = "label+value+percent parent", branchvalues = "total"))
fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))
fig.show()
复制代码



我们采用了 6 种不同类型的精美图形来展示这份数据,你觉得哪个更适合展示这份数据?请选择😊

发布于: 刚刚阅读数: 2
用户头像

Peter

关注

志之所趋,无远弗届,穷山距海,不能限也。 2019.01.15 加入

还未添加个人简介

评论

发布
暂无评论
一份数据的6种Plotly画法