前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >局部整体(五)利用python绘制旭日图

局部整体(五)利用python绘制旭日图

作者头像
HsuHeinrich
发布2024-11-23 08:42:20
发布2024-11-23 08:42:20
14600
代码可运行
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich
运行总次数:0
代码可运行

局部整体(五)利用python绘制旭日图

旭日图( Sunburst Charts)简介

由于其形状像太阳光由内向外辐射出来,所以叫SunBurst(太阳爆发),中文也叫日出图。是多个层级的环图/饼图的拓展,可以显示多个层级的整体分布关系。

快速绘制

基于plotly

代码语言:javascript
代码运行次数:0
复制
# 基于plotly.express(自定义程度低,代码量较少)

import plotly.express as px
import numpy as np

df = px.data.gapminder().query("year == 2007")
fig = px.sunburst(df, path=['continent', 'country'], values='pop',
                  color='lifeExp', hover_data=['iso_alpha'],
                  color_continuous_scale='RdBu',
                  color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))
fig.show()

定制多样化的圆环图

自定义旭日图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

基于plotly.graph_objects可以自定义更为灵活的旭日图

代码语言:javascript
代码运行次数:0
复制
# 基于plotly.graph_objects(自定义程度高,代码量较大)

import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
import numpy as np

df = px.data.gapminder().query("year == 2007")

def build_tree(df, levels, value_columns):
    '''
    将df多层级数据转化为两列,分别表示自节点(label)和父节点(parent)。value_columns为统计值(不同层级汇总后的值)
    '''
    dfs = []  # 临时存储的df列表
    for i, level in enumerate(levels):
        dfg = df.groupby(levels[i:]).agg(value_columns).reset_index()
        df_level = pd.DataFrame({'label': dfg[level], 
                                 'parent': dfg[levels[i + 1]] if i + 1 < len(levels) else '', 
                               })
        for value_column in value_columns.keys():
            df_level[value_column] = dfg[value_column]
        dfs.append(df_level)

    df_tree = pd.concat(dfs, ignore_index=True)
    return df_tree

levels = ['country','continent']
# 这里对lifeExp只做简单的平均,plotly.express里的color是按照value作为权重进行加权平均计算的
value_columns = {'pop': 'sum', 'lifeExp': 'mean'} 
df_tree = build_tree(df, levels, value_columns)

fig =go.Figure(go.Sunburst(
    labels=df_tree['label'],
    parents=df_tree['parent'],
    values=df_tree['pop'],
    branchvalues="total",
    hovertext=df['pop'],
    marker=dict(
        colors=df_tree['lifeExp'], 
        colorscale='RdBu',
        cmid=np.average(df['lifeExp'], weights=df['pop']),
        colorbar=dict(
              title='LifeExp'
        )    
    ),
    hovertemplate='<b>%{label} </b> <br> Pops: %{value}<br> lifeExp: %{color:.2f}',
))
fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))

fig.show()

总结

以上利用plotly的express模块快速绘制旭日图,也通过plotly的graph_objects更为灵活的自定义旭日图。

共勉~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 局部整体(五)利用python绘制旭日图
    • 旭日图( Sunburst Charts)简介
    • 快速绘制
    • 定制多样化的圆环图
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档