【Python百日进阶-数据分析】Day136 - plotly旭日图:px.sunburst()实例

四、实例

旭日图可视化从根到叶径向向外跨越的分层数据。与Icicle 图表和Treemaps类似,层次结构由labels( namesfor px.icicle) 和parents属性定义。根从中心开始,子代被添加到外环。

4.1 带有 plotly.express 的旭日图

Plotly Express是 Plotly 的易于使用的高级界面,它对各种类型的数据进行操作并生成易于样式化的图形。

使用px.sunburst,DataFrame 的每一行都表示为旭日形的一个扇区。

4.1.1 基础旭日图

import plotly.express as px
data = dict(
    character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
    value=[10, 14, 12, 10, 2, 6, 6, 4, 4])

fig = px.sunburst(
    data,
    names='character',
    parents='parent',
    values='value',
)
fig.show()

在这里插入图片描述

4.1.2 带有 plotly.express 的矩形 DataFrame 的旭日形

分层数据通常存储为矩形数据框,不同的列对应于层次结构的不同级别。px.sunburst可以采用path与列列表对应的参数。请注意,path id如果给出,parent则不应提供。

import plotly.express as px
df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.sunburst(df, path=['day', 'time', 'sex'], values='total_bill')
fig.show()

在这里插入图片描述

4.1.3 改变path顺序,从而改变父子关系

import plotly.express as px
df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.sunburst(df, path=['day', 'sex', 'time'], values='total_bill')
fig.show()

在这里插入图片描述

4.1.4 在 px.sunburst 中具有连续颜色参数的矩形 DataFrame 的 Sunburst

如果color传递了参数,则节点的颜色将计算为其子节点颜色值的平均值,并按其值加权。

import plotly.express as px
import numpy as np
df = px.data.gapminder().query("year == 2007")
print(df)
'''
                 country continent  year  ...     gdpPercap  iso_alpha  iso_num
11           Afghanistan      Asia  2007  ...    974.580338        AFG        4
23               Albania    Europe  2007  ...   5937.029526        ALB        8
35               Algeria    Africa  2007  ...   6223.367465        DZA       12
47                Angola    Africa  2007  ...   4797.231267        AGO       24
59             Argentina  Americas  2007  ...  12779.379640        ARG       32
...                  ...       ...   ...  ...           ...        ...      ...
1655             Vietnam      Asia  2007  ...   2441.576404        VNM      704
1667  West Bank and Gaza      Asia  2007  ...   3025.349798        PSE      275
1679         Yemen, Rep.      Asia  2007  ...   2280.769906        YEM      887
1691              Zambia    Africa  2007  ...   1271.211593        ZMB      894
1703            Zimbabwe    Africa  2007  ...    469.709298        ZWE      716

[142 rows x 8 columns]
'''
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()

在这里插入图片描述

4.1.5 在 px.sunburst 中具有离散颜色参数的矩形 DataFrame 的 Sunburst

当 的参数color对应于非数值数据时,使用离散颜色。如果一个扇区的color所有子项的列值相同,则使用相应的颜色,否则使用离散颜色序列的第一种颜色。

import plotly.express as px
df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.sunburst(df, path=['sex', 'day', 'time'], values='total_bill', color='day')
fig.show()

在这里插入图片描述
在下面的示例中,Saturday和Sunday扇区的颜色相同,Dinner因为只有周六和周日的晚餐条目。但是,对于女性 -> 星期五,有午餐和晚餐,因此使用“混合”颜色(此处为蓝色)。

import plotly.express as px
df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.sunburst(df, path=['sex', 'day', 'time'], values='total_bill', color='time')
fig.show()

在这里插入图片描述

4.1.6 对离散颜色使用显式映射

有关离散颜色的更多信息,请参阅专用页面。

import plotly.express as px
df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.sunburst(df,
                  path=['sex', 'day', 'time'],
                  values='total_bill',
                  color='time',
                  color_discrete_map={'(?)':'black', 'Lunch':'gold', 'Dinner':'darkblue'})
fig.show()

在这里插入图片描述

4.1.7 具有缺失值的矩形数据

如果数据集不是完全矩形,则缺失值应提供为None. 请注意,None条目的父母必须是叶子,即None它不能有其他孩子(否则会引发ValueError)。

    raise ValueError(
ValueError: ('None entries cannot have not-None children', regions    North
vendors     None
sectors    Other
Name: 4, dtype: object)
import plotly.express as px
import pandas as pd
vendors = ["A", "B", "C", "D", None, "E", "F", "G", "H", None]
sectors = ["Tech", "Tech", "Finance", "Finance", "Other",
           "Tech", "Tech", "Finance", "Finance", "Other"]
regions = ["North", "North", "North", "North", "North",
           "South", "South", "South", "South", "South"]
sales = [1, 3, 2, 4, 1, 2, 2, 1, 4, 1]
df = pd.DataFrame(
    dict(vendors=vendors, sectors=sectors, regions=regions, sales=sales)
)
print(df)
'''
  vendors  sectors regions  sales
0       A     Tech   North      1
1       B     Tech   North      3
2       C  Finance   North      2
3       D  Finance   North      4
4    None    Other   North      1
5       E     Tech   South      2
6       F     Tech   South      2
7       G  Finance   South      1
8       H  Finance   South      4
9    None    Other   South      1
'''
fig = px.sunburst(df, path=['regions', 'sectors', 'vendors'], values='sales')
fig.show()

在这里插入图片描述

`px.sunburst()` 是 Plotly Express 库中用于创建旭日Sunburst Chart)的函数。旭日是一种可视化工具,用于展示层次结构数据的分布和关系。 `px.sunburst()` 函数的常用参数如下: - `data_frame`:必需参数,指定要使用的数据框(DataFrame)或数据表。 - `names`:必需参数,指定用于表示每个分区名称的列名。 - `values`:可选参数,指定用于表示每个分区值的列名。如果未提供此参数,则每个分区的大小将由其子级分区的数量决定。 - `parents`:可选参数,指定用于表示每个分区父级的列名。父级可以是另一个分区或根节点。如果未提供此参数,则会自动推断层次结构关系。 - `branchvalues`:可选参数,指定如何计算分区的值。可选值为 `'total'`(默认)表示将每个分区的值设置为其子级分区值之和,或者 `'remainder'` 表示将每个分区的值设置为其子级分区值之差。 - `color`:可选参数,指定用于给分区着色的列名或数值。可以是分类变量或连续变量。默认情况下,根据层次结构关系为每个分区分配颜色。 - `color_continuous_scale`:可选参数,指定用于连续变量着色的颜色比例尺。 - `color_continuous_midpoint`:可选参数,指定连续变量着色的中间值。 - `hover_name`:可选参数,指定用于分区悬停文本的列名。 - `hover_data`:可选参数,指定要添加到悬停工具提示中的其他列名。 这些参数只是 `px.sunburst()` 函数的一部分,还有其他一些参数可以用于自定义旭日的样式、布局和交互性。你可以查阅 Plotly Express 的文档以了解更多详细信息和示例:https://plotly.com/python/sunburst-charts/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岳涛@心馨电脑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值