关键词:
大家好,我是Peter~
今天给大家带来的是一篇关于Plotly绘图的文章:如何使用Plotly来绘制矩形树状图
Plotly文章
目前Plotly的文章更新到第17篇,推荐几篇文章:
闲聊
为什么Peter一直坚持写Plotly的文章?国庆节前有位读者加了Peter的VX:
1、你的教程关于Plotly的对我帮助很大🦀
2、本科大三就开始卷了😭
3、山大学子,优秀👍
以前还有另一位Plotly的读者,也是看了Peter的文章:
所以大家一起好好学习,Peter也好好写文章,说不定哪天你看了就会受益~
什么是树图
树状图(tree diagram)是一种将层次结构式的构造性质,以图象方式表现出来的方法。主要是通过父子级的关系来表现的,比如:中国—广东—深圳,就是一个例子。中国和广东之间,广东和深圳之间都是这种关系的表现。
下面是网上找到的一份关于树图的层级结构的图形,很经典:
我们再看一幅现代的很有冲击力的树图:
这种图形叫缓冲垫树状结构图(Cushion Treemap),它使用纹理使每个矩形在中间看起来像垫子一样”凸起”,并且逐渐变细到边缘。这种视觉效果利用了人类将这种类型的阴影解释为凸起的表面的优势,从而可以更快地识别出不同的矩形
参考资源:
1、Plotly官网:https://plotly.com/python/treemaps/
2、矩形式树状结构图(Treemaps)-复杂层次结构的数据可视化:https://www.idesigntools.com/treemaps.html
导入库
本文中介绍的树图还是会使用 plotly_express 和 plotly.graph_objects 两种方法来绘制,下面还是先导入库:
import pandas as pd
import numpy as np
import plotly_express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots # 画子图
基于plotly_express绘制
2.1 基础树状图
在绘制树图的时候是基于数据的列表形式
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
fig = px.treemap(
names = name,
parents = parent)
fig.update_traces(root_color="lightgrey")
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()
2.2 基于DataFrame的树图
上面的数据是我们自定义的列表形式,一般如果在pandas中,数据会是DataFrame的格式,如何绘制树图呢?
在这里我们使用的plotly中自带的消费数据集:
fig = px.treemap(
df, # 传入数据
path=[px.Constant("all"),"day","sex","time"], # 重点:传递数据路径
values="tip" # 数值显示使用哪个字段
)
fig.update_traces(root_color="lightskyblue")
fig.update_layout(margin=dict(t=30,l=20,r=25,b=30))
fig.show()
还可以设置颜色参数:
fig = px.treemap(
df,
path=[px.Constant("all"),"day","sex","time"], # 重点:传递数据路径
values="tip",
color="time" # 指定颜色变化的参数
)
fig.update_traces(root_color="lightskyblue")
fig.update_layout(margin=dict(t=30,l=20,r=25,b=30))
fig.show()
2.3 带有连续颜色变化的树图
在这里采用的是gdp数据集:
fig = px.treemap(
df1,
path=[px.Constant("world"),"continent","country"], # 路径
values="pop", # 值
color="lifeExp", # 颜色的取值
hover_data=["iso_alpha"], # 悬停数据
color_continuous_scale="RdBu", # 颜色变化的设置
color_continuous_midpoint=np.average(df1["lifeExp"],
weights=df1["pop"])
)
fig.update_layout(margin = dict(t=40, l=15, r=35, b=45))
fig.show()
2.4 基于离散颜色变化的树状图
采用的还是基于消费的数据集:
绘图代码如下:
fig = px.treemap(
df, # 传入数据
path=[px.Constant("all"), 'sex', 'day', 'time'], # 数据路径
values='total_bill', # 采用的值
color='time', # 颜色
color_discrete_map='(?)':'lightgrey', # 离散型颜色设置
'Lunch':'gold',
'Dinner':'darkblue')
fig.update_layout(margin = dict(t=50, l=15, r=25, b=35))
fig.show()
3 基于go.Treemap绘制
3.1 基础树状图
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
fig = go.Figure(go.Treemap( # go方法实现
labels = name,
parents = parent,
root_color = "lightgrey"
))
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()
3.2 不同颜色的树图
多种方式来设置树状图的颜色
1、方式1
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
color = ["pink", "royalblue", "lightgray", "purple", "cyan", "lightgray", "lightblue", "lightgreen"]
fig = go.Figure(go.Treemap(
labels = name,
parents = parent,
marker_colors = color # 方式1:marker_colors参数设置
))
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()
方式2:
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
fig = go.Figure(go.Treemap(
labels = name,
parents = parent,
))
fig.update_layout(
margin = dict(t=50, l=25, r=25, b=25),
# 方式2:通过 treemapcolorway 参数设置
treemapcolorway = ["pink","blue","red","lightblue","purple","royalblue"])
fig.show()
方式3:
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
values = [0,10,20,30,44,55,60,70,88,96,127,150,180]
fig = go.Figure(go.Treemap(
labels = name,
parents = parent,
values = values,
marker_colorscale = 'Blues' # 方式3
))
fig.update_layout(
margin = dict(t=20, l=25, r=25, b=25))
fig.show()
如果我们想控制所有的标签内容的大小是相同的,我们可以使用来uniformtext参数来进行控制。
在这里我们采用的是一份在线的CSV文件:
fig = go.Figure(go.Treemap(
ids = df2.ids,
labels = df2.labels, # 标签
parents = df2.parents, # 父级路径
pathbar_textfont_size = 20, # 路径的字体大小
root_color = "lightblue" # root下的颜色
))
fig.update_layout(uniformtext=dict(minsize=10,mode="hide"),
margin=dict(t=50,l=25,r=25,b=25))
fig.show()
可视化神器plotly绘制3d图(代码片段)
公众号:尤而小屋作者:Peter编辑:Peter大家好,我是Peter~本文中重点介绍的是如何利用plotly来绘制3D图形。在3D图形中一般是包含3个轴的:x、y、z。在Plotly中绘图的时候,我们对layout布局进行设置的时候... 查看详情
可视化神器plotly绘制热力图(代码片段)
公众号:尤而小屋作者:Peter编辑:Peter大家好,我是Peter~之前更新了很多关于Plotly绘图的文章。今天带来的文章是基于官网和实际案例来讲解如何绘制不同需求下的热力图。Plotly中绘制热力图有3种方式:heatma... 查看详情
再见matplotlib,可视化神器plotly绘制图表的太酷炫了(代码片段)
数据分析离不开数据可视化。我们最常用的就是pandas,matplotlib,pyecharts当然还有Tableau,最近看到一篇文章介绍plotly制图后,我感觉写的不够简洁明了。今天就给大家分享利用可视化神器Plotly绘制酷炫图表,欢... 查看详情
plotly可视化绘制混合图(代码片段)
plotly可视化绘制混合图#混合图多种可视化形式融合在一个图形中;fromplotly.graph_objsimport*importplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plotimportpandasaspd#readinvolcanodatabasedatadf=pd.read_excel(r\'volcano_db.x 查看详情
plotly可视化绘制多子图(subplots)(代码片段)
plotly可视化绘制多子图(subplots)#多子图;fromplotlyimporttoolsimportplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[1,2,3],y=[4,5,6],mode=\'markers+text+lines\',text=[\'A\',\'B\',\' 查看详情
plotly可视化绘制嵌入式子图(代码片段)
plotly可视化绘制嵌入式子图#嵌入式子图importplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[1,2,3],y=[4,3,2])trace2=go.Scatter(x=[20,30,40],y=[30,40,50],xaxi 查看详情
plotly可视化绘制共享坐标轴图(代码片段)
plotly可视化绘制共享坐标轴图#plotly绘制共享坐标轴图;importplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[0,1,2],y=[10,11,12])trace2=go.Scatter(x=[2,3,4],y=[100,110,120],yaxis=\'y2\')trace 查看详情
plotly可视化绘制双子图(subplots)(代码片段)
plotly可视化绘制双子图(subplots)#双子图fromplotlyimporttoolsimportplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[1,2,3],y=[4,5,6])trace2=go.Scatter(x=[20,30,40],y=[50,60,70],)fig= 查看详情
plotly可视化绘制多子图(subplots)并自定义子图(代码片段)
plotly可视化绘制多子图(subplots)并自定义子图# 多子图(subplots)并自定义子图fromplotlyimporttoolsimportplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace0=go.Scatter(x=[1,2],y=[1,2])trace1=go.Scatter(x=[1,2] 查看详情
plotly可视化绘制多坐标轴图(代码片段)
plotly可视化绘制多坐标轴图 #绘制多坐标轴图;importplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[1,2,3],y=[4,5,6],name=\'yaxis1数据\')trace2=go.Scatter(x=[2,3,4],y=[40,50,60],name=\'y 查看详情
可视化神器plotly:子图的绘制(代码片段)
楔子下面我们来进行高级图表的绘制,说是高级图表,其实也不算高级。以下代码在jupyternotebook上运行,先导入以下模块importplotlyaspyimportplotly.graph_objsasgoimportnumpyasnpimportpandasaspdimportdatetime时间序列plotly对时间的支持特别友好,... 查看详情
plotly可视化绘制双坐标轴图(代码片段)
plotly可视化绘制双坐标轴图 #双坐标轴图importplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[1,2,3],y=[40,50,60],name=\'yaxis数据\')trace2=go.Scatter(x=[2,3,4],y=[4,5,6],name=\'yaxis 查看详情
plotly可视化绘制多子图(subplots)共享坐标轴(代码片段)
plotly可视化绘制多子图(subplots)共享坐标轴#共享坐标轴importplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[1,2,3],y=[2,3,4])trace2=go.Scatter(x=[20,30,40],y=[5,5,5],xaxis=\'x2\',yaxis=\'y 查看详情
plotly可视化绘制多子图(subplots)并自定义坐标轴(代码片段)
plotly可视化绘制多子图(subplots)并自定义坐标轴#多子图并自定义坐标轴fromplotlyimporttoolsimportplotlyaspyimportplotly.graph_objsasgopyplt=py.offline.plottrace1=go.Scatter(x=[1,2,3],y=[4,5,6])trace2=go.Scatter(x=[20,30,40],y=[5 查看详情
plotly绘制金融时间序列图实战:配置滑动控件(代码片段)
Plotly绘制金融时间序列图实战:配置滑动控件#可视化金融时间序列数据并设置时间粒度组件;importplotlyaspyimportplotly.graph_objsasgoimportpandasaspd#----------predefpyplt=py.offline.plot#----------codedf=pd.read_csv(r\'day01.csv\',index_col=[0 查看详情
最强的python可视化神器,你有用过么?(代码片段)
数据分析离不开数据可视化,我们最常用的就是Pandas,Matplotlib,Pyecharts当然还有Tableau,看到一篇文章介绍Plotly制图后我也跃跃欲试,查看了相关资料开始尝试用它制图。1、PlotlyPlotly是一款用来做数据分析和... 查看详情
可视化神器plotly美化表格(代码片段)
公众号:尤而小屋作者:Peter编辑:Peter可视化神器Plotly美化表格有时候看到一份表格,没有任何的颜色修饰,总觉得缺点美观效果。在Excel中我们可以直接对字体的颜色、大小等进行设置,还可以进行单元... 查看详情
一学就会,20000字深度讲解python数据可视化神器plotly(代码片段)
作为Python的新一代数据可视化绘图库,和matplotlib等传统绘图库相比,plotly具有以下优点:简洁易用:作为一只小透明,plotly的图表对象就像一个嵌套dict,可以通过直接修改对象属性而改变图表形态。学习难度远远小... 查看详情