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

news2024/12/24 7:43:17

文章目录

    • 4.2 带有 go.Sunburst 的基本旭日图
      • 4.2.1 基本go.sunburst()旭日图
      • 4.2.2 带有重复标签的旭日图
      • 4.2.3 分支值
      • 4.2.4 大量切片
      • 4.2.5 控制旭日形扇区内的文本方向
      • 4.2.6 使用 uniformtext 控制文本字体大小
      • 4.2.7 具有连续色标的旭日图
      • 4.2.8 Dash中的go.sunburst()

4.2 带有 go.Sunburst 的基本旭日图

如果Plotly Express 没有提供一个好的起点,也可以使用go.Sunburst(plotly.graph_objects).

要点:

  • labels(namesin px.sunburstsincelabels保留用于覆盖列名):设置旭日形扇区的标签。
  • parents:设置朝阳扇区的父扇区。空字符串’'用于层次结构中的根节点。在此示例中,根是“Eve”。
  • values:设置与旭日形扇区相关的值,确定它们的宽度(有关branchvalues设置宽度的不同模式,请参见下面的部分)。

4.2.1 基本go.sunburst()旭日图

import plotly.graph_objects as go

fig =go.Figure(go.Sunburst(
    labels=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parents=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
    values=[10, 14, 12, 10, 2, 6, 6, 4, 4],
))
# 更新版面,以缩小页边空白
# 参见 https://plotly.com/python/creating-and-updating-figures/
fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))

fig.show()

在这里插入图片描述

4.2.2 带有重复标签的旭日图

import plotly.graph_objects as go

fig =go.Figure(go.Sunburst(
 ids=[
    "North America", "Europe", "Australia", "North America - Football", "Soccer",
    "North America - Rugby", "Europe - Football", "Rugby",
    "Europe - American Football","Australia - Football", "Association",
    "Australian Rules", "Autstralia - American Football", "Australia - Rugby",
    "Rugby League", "Rugby Union"
  ],
  labels= [
    "North<br>America", "Europe", "Australia", "Football", "Soccer", "Rugby",
    "Football", "Rugby", "American<br>Football", "Football", "Association",
    "Australian<br>Rules", "American<br>Football", "Rugby", "Rugby<br>League",
    "Rugby<br>Union"
  ],
  parents=[
    "", "", "", "North America", "North America", "North America", "Europe",
    "Europe", "Europe","Australia", "Australia - Football", "Australia - Football",
    "Australia - Football", "Australia - Football", "Australia - Rugby",
    "Australia - Rugby"
  ],
))
fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))

fig.show()

在这里插入图片描述

4.2.3 分支值

对于分支值“total”,父项的值表示其楔形的宽度。在下面的例子中,“Enoch”是 4,“Awan”是 6,所以 Enoch 的宽度是 Awans 的 4/6。使用分支值“剩余”,父级的宽度由其自身的值加上其子级的值确定。因此,Enoch 的宽度是 Awan (4 / (6 + 4)) 的 4/10。

请注意,这意味着当 branchvalues 设置为“total”时,子项的值之和不能超过其父项的值。当 branchvalues 设置为“remainder”(默认值)时,子级不会占用其父级下方的所有空间(除非父级是根并且其值为 0)。

import plotly.graph_objects as go

fig =go.Figure(go.Sunburst(
    labels=[ "Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parents=["",    "Eve",  "Eve",  "Seth", "Seth", "Eve",  "Eve",  "Awan",  "Eve" ],
    values=[  65,    14,     12,     10,     2,      6,      6,      4,       4],
    branchvalues="total",
))
fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))

fig.show()

在这里插入图片描述

4.2.4 大量切片

此示例对 suplots 使用plotly 网格属性。使用域属性引用行和列目标。

import plotly.graph_objects as go

import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/sunburst-coffee-flavors-complete.csv'
df1 = pd.read_csv('f:/sunburst-coffee-flavors-complete.csv')
print(df1)
'''
                        ids            labels         parents
0                    Aromas            Aromas             NaN
1                    Tastes            Tastes             NaN
2          Aromas-Enzymatic         Enzymatic          Aromas
3     Aromas-Sugar Browning    Sugar Browning          Aromas
4   Aromas-Dry Distillation  Dry Distillation          Aromas
..                      ...               ...             ...
91            Pungent-Thyme             Thyme   Spicy-Pungent
92             Smokey-Tarry             Tarry  Carbony-Smokey
93      Smokey-Pipe Tobacco      Pipe Tobacco  Carbony-Smokey
94               Ashy-Burnt             Burnt    Carbony-Ashy
95             Ashy-Charred           Charred    Carbony-Ashy

[96 rows x 3 columns]
'''
# 'https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/coffee-flavors.csv'
df2 = pd.read_csv('f:/coffee-flavors.csv')
print(df2)
'''
                        ids        labels         parents
0         Enzymatic-Flowery       Flowery             NaN
1          Enzymatic-Fruity        Fruity             NaN
2           Enzymatic-Herby         Herby             NaN
3      Sugar Browning-Nutty         Nutty             NaN
4   Sugar Browning-Carmelly      Carmelly             NaN
..                      ...           ...             ...
82            Pungent-Thyme         Thyme   Spicy-Pungent
83             Smokey-Tarry         Tarry  Carbony-Smokey
84      Smokey-Pipe Tobacco  Pipe Tobacco  Carbony-Smokey
85               Ashy-Burnt         Burnt    Carbony-Ashy
86             Ashy-Charred       Charred    Carbony-Ashy

[87 rows x 3 columns]
'''
fig = go.Figure()

fig.add_trace(go.Sunburst(
    ids=df1.ids,
    labels=df1.labels,
    parents=df1.parents,
    domain=dict(column=0)
))

fig.add_trace(go.Sunburst(
    ids=df2.ids,
    labels=df2.labels,
    parents=df2.parents,
    domain=dict(column=1),
    maxdepth=2
))

fig.update_layout(
    grid= dict(columns=2, rows=1),
    margin = dict(t=0, l=0, r=0, b=0)
)

fig.show()

在这里插入图片描述

4.2.5 控制旭日形扇区内的文本方向

该insidetextorientation属性控制扇区内文本的方向。使用“自动”,文本可以自动旋转以适应切片内的最大尺寸。使用“水平”(分别是“径向”、“切向”)强制文本是水平的(分别是径向或切向)。请注意,plotly可能会减小字体大小以使文本符合请求的方向。

对于fig使用 plotly express 创建的图形,用于fig.update_traces(insidetextorientation=‘…’)更改文本方向。

import plotly.graph_objects as go

import pandas as pd

# 'https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/coffee-flavors.csv'
df = pd.read_csv('f:/coffee-flavors.csv')
print(df)
'''
                        ids        labels         parents
0         Enzymatic-Flowery       Flowery             NaN
1          Enzymatic-Fruity        Fruity             NaN
2           Enzymatic-Herby         Herby             NaN
3      Sugar Browning-Nutty         Nutty             NaN
4   Sugar Browning-Carmelly      Carmelly             NaN
..                      ...           ...             ...
82            Pungent-Thyme         Thyme   Spicy-Pungent
83             Smokey-Tarry         Tarry  Carbony-Smokey
84      Smokey-Pipe Tobacco  Pipe Tobacco  Carbony-Smokey
85               Ashy-Burnt         Burnt    Carbony-Ashy
86             Ashy-Charred       Charred    Carbony-Ashy

[87 rows x 3 columns]
'''
fig = go.Figure()

fig.add_trace(go.Sunburst(
    ids=df.ids,
    labels=df.labels,
    parents=df.parents,
    domain=dict(column=1),
    maxdepth=2,
    insidetextorientation='radial'
))

fig.update_layout(
    margin = dict(t=10, l=10, r=10, b=10)
)

fig.show()

在这里插入图片描述

4.2.6 使用 uniformtext 控制文本字体大小

如果您希望所有文本标签具有相同的大小,可以使用uniformtextlayout 参数。该minsize属性设置字体大小,该mode属性设置不适合所需字体大小的标签会发生什么:hide它们或show溢出的标签。

注意:动画过渡当前在uniformtext使用时没有实现。

import plotly.graph_objects as go
import pandas as pd

# 'https://raw.githubusercontent.com/plotly/datasets/718417069ead87650b90472464c7565dc8c2cb1c/sunburst-coffee-flavors-complete.csv'
df = pd.read_csv('f:/sunburst-coffee-flavors-complete.csv')
print(df)
'''
                        ids            labels         parents
0                    Aromas            Aromas             NaN
1                    Tastes            Tastes             NaN
2          Aromas-Enzymatic         Enzymatic          Aromas
3     Aromas-Sugar Browning    Sugar Browning          Aromas
4   Aromas-Dry Distillation  Dry Distillation          Aromas
..                      ...               ...             ...
91            Pungent-Thyme             Thyme   Spicy-Pungent
92             Smokey-Tarry             Tarry  Carbony-Smokey
93      Smokey-Pipe Tobacco      Pipe Tobacco  Carbony-Smokey
94               Ashy-Burnt             Burnt    Carbony-Ashy
95             Ashy-Charred           Charred    Carbony-Ashy

[96 rows x 3 columns]
'''

fig = go.Figure(go.Sunburst(
        ids = df.ids,
        labels = df.labels,
        parents = df.parents))
fig.update_layout(uniformtext=dict(minsize=10, mode='hide'))
fig.show()

在这里插入图片描述

4.2.7 具有连续色标的旭日图

下面的示例显示了按地区、县和销售人员级别划分的销售明细(对应于部门宽度)和呼叫成功率(对应于部门颜色)。例如,在探索数据时,您可以看到虽然东部地区表现不佳,但泰勒县仍然高于平均水平——但是,由于销售人员 GT 的成功率低,其表现有所下降。

在具有两个级别的右侧子图中maxdepth,单击一个扇区以查看其细分到较低级别。

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/master/sales_success.csv'
df = pd.read_csv('f:/sales_success.csv')
print(df)
'''
    Unnamed: 0 region    county salesperson  calls  sales
0            0  North    Dallam          JE     35     23
1            1  North    Dallam          ZQ     49     13
2            2  North    Dallam          IJ     20      6
3            3  North   Hartley          WE     39     37
4            4  North   Hartley          PL     42     37
5            5  North   Hartley          BI     24      8
6            6  North     Moore          TW     33      6
7            7  North     Moore          TZ     33     20
8            8  North     Moore          ZM     21     13
9            9  North      Gray          ES     49     31
10          10  North      Gray          XY     31     28
11          11  North      Gray          YJ     35     13
12          12  North     Floyd          WH     44     37
13          13  North     Floyd          OH     31      6
14          14  North     Floyd          UA     44     34
15          15  North    Motley          EH     44     34
16          16  North    Motley          MW     22     21
17          17  North    Motley          NY     35     15
18          18   West     Pecos          WV     30     25
19          19   West     Pecos          QM     48     45
20          20   West     Pecos          WZ     37     23
21          21   West  Brewster          IK     33     20
22          22   West  Brewster          BS     33     14
23          23   West  Brewster          JF     20      8
24          24   West  Presidio          DQ     40     15
25          25   West  Presidio          OT     35      9
26          26   West  Presidio          SV     45     30
27          27  South      Webb          KR     20      6
28          28  South      Webb          QJ     46     40
29          29  South      Webb          RR     48     26
30          30  South     Duval          FJ     20      7
31          31  South     Duval          GW     20      6
32          32  South     Duval          DS     42      9
33          33  South   Hidalgo          LQ     41     16
34          34  South   Hidalgo          LR     39      7
35          35  South   Hidalgo          LV     21     11
36          36  South    Zavala          YA     25     21
37          37  South    Zavala          FL     31     24
38          38  South    Zavala          IV     28     20
39          39   East    Shelby          NZ     45     16
40          40   East    Shelby          VN     29      6
41          41   East    Shelby          XH     47      6
42          42   East      Rusk          HW     20      8
43          43   East      Rusk          UM     24      8
44          44   East      Rusk          OY     40     20
45          45   East     Tyler          JC     21     17
46          46   East     Tyler          GT     30      4
47          47   East     Tyler          UF     49     35
48          48   East   Houston          QK     22      8
49          49   East   Houston          AX     42      9
50          50   East   Houston          YN     38     23
'''
levels = ['salesperson', 'county', 'region'] # levels used for the hierarchical chart
color_columns = ['sales', 'calls']
value_column = 'calls'

def build_hierarchical_dataframe(df, levels, value_column, color_columns=None):
    """
    Build a hierarchy of levels for Sunburst or Treemap charts.

    Levels are given starting from the bottom to the top of the hierarchy,
    ie the last level corresponds to the root.
    """
    df_all_trees = pd.DataFrame(columns=['id', 'parent', 'value', 'color'])
    for i, level in enumerate(levels):
        df_tree = pd.DataFrame(columns=['id', 'parent', 'value', 'color'])
        dfg = df.groupby(levels[i:]).sum()
        dfg = dfg.reset_index()
        df_tree['id'] = dfg[level].copy()
        if i < len(levels) - 1:
            df_tree['parent'] = dfg[levels[i+1]].copy()
        else:
            df_tree['parent'] = 'total'
        df_tree['value'] = dfg[value_column]
        df_tree['color'] = dfg[color_columns[0]] / dfg[color_columns[1]]
        df_all_trees = df_all_trees.append(df_tree, ignore_index=True)
    total = pd.Series(dict(id='total', parent='',
                              value=df[value_column].sum(),
                              color=df[color_columns[0]].sum() / df[color_columns[1]].sum()))
    df_all_trees = df_all_trees.append(total, ignore_index=True)
    return df_all_trees


df_all_trees = build_hierarchical_dataframe(df, levels, value_column, color_columns)
average_score = df['sales'].sum() / df['calls'].sum()

fig = make_subplots(1, 2, specs=[[{"type": "domain"}, {"type": "domain"}]],)

fig.add_trace(go.Sunburst(
    labels=df_all_trees['id'],
    parents=df_all_trees['parent'],
    values=df_all_trees['value'],
    branchvalues='total',
    marker=dict(
        colors=df_all_trees['color'],
        colorscale='RdBu',
        cmid=average_score),
    hovertemplate='<b>%{label} </b> <br> Sales: %{value}<br> Success rate: %{color:.2f}',
    name=''
    ), 1, 1)

fig.add_trace(go.Sunburst(
    labels=df_all_trees['id'],
    parents=df_all_trees['parent'],
    values=df_all_trees['value'],
    branchvalues='total',
    marker=dict(
        colors=df_all_trees['color'],
        colorscale='RdBu',
        cmid=average_score),
    hovertemplate='<b>%{label} </b> <br> Sales: %{value}<br> Success rate: %{color:.2f}',
    maxdepth=2
    ), 1, 2)

fig.update_layout(margin=dict(t=10, b=10, r=10, l=10))
fig.show()

在这里插入图片描述

4.2.8 Dash中的go.sunburst()

import plotly.graph_objects as go # or plotly.express as px
fig = go.Figure() # or any Plotly Express function e.g. px.bar(...)
# fig.add_trace( ... )
# fig.update_layout( ... )

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()
app.layout = html.Div([
    dcc.Graph(figure=fig)
])

app.run_server(debug=True, use_reloader=False)  # Turn off reloader if inside Jupyter

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android hilt 依赖注入使用详解

文章目录官方文档添加依赖初始化hiltMainActivity 使用共享类在 MainActivity 添加依赖注入ActivityScoped 作用域Singleton 作用域构造参数&#xff0c;添加 Context参数ApplicationContext、ActivityContext官方文档 https://developer.android.com/training/dependency-inj…

【Linux】缓冲区/磁盘inode/动静态库制作

目录 一、缓冲区 1、缓冲区的概念 2、缓冲区的意义 3、缓冲区刷新策略 4、同一份代码&#xff0c;打印结果不同 5、仿写FILE 5.1myFILE.h 5.2myFILE.c 5.3main.c 6、内核缓冲区 二、了解磁盘 1、磁盘的物理结构 2、磁盘的存储结构 2.1磁盘的定位 3、磁盘的抽象…

基于价值迭代求解迷宫寻路问题

摘 要 迷宫寻路是人工智能和计算机科学中一个经典的问题。它涉及在迷宫中找到一条从起点到终点的最短路径。这个问题可以用来模拟真实世界中的许多情况&#xff0c;例如机器人在工厂中自动导航&#xff0c;搜索引擎在网络中寻找信息&#xff0c;或者人类在城市中导航。 迷宫寻路…

【Javascript基础】--零基础--超详细且简洁的Javascript笔记--简介(01)

参考资料&#xff1a; 【现代Javascript教程】https://zh.javascript.info/ 【MDN】https://developer.mozilla.org/zh-CN/ 笔记仅作为学习交流载体&#xff0c;无任何商业或盈利目的 JavaScript 简介 了解 JavaScript 有什么特别之处&#xff0c;我们可以用它实现什么&#…

适合编程初学者的开源博客系统(Vue3+Element Plus版)

目标 为编程初学者打造入门学习项目&#xff0c;使用各种主流编程语言来实现。让想学编程的&#xff0c;一个都不落下。 上述基本涵盖了当前编程开发所有主流语言。 左侧为前端版本&#xff1a;安卓、iOS、鸿蒙、Flutter、Vue、uni-app、微信小程序。 右侧为服务器端版本&am…

YOLOV7学习记录之模型推理

前面我们学习了YOLOV7的训练过程&#xff0c;今天我们学习其推理过程&#xff0c;即模型预测&#xff1a;其包含损失函数计算&#xff0c;输出值解码&#xff0c;非极大值抑制&#xff0c;mAP计算等过程。 同时还介绍原始图像上绘制目标框等功能。 我们从predict.py文件开始&am…

【源码共读】Vite 项目自动添加 eslint 和 prettier

vite-pretty-lint库是一个为Vite创建的Vue或React项目初始化eslint和prettier的库。 该库的目的是为了让开发者在创建项目时&#xff0c;不需要手动配置eslint和prettier&#xff0c;而是通过vite-pretty-lint库来自动配置。 源码地址&#xff1a; vite-pretty-lintgithub1s…

设计模式 - 单例模式(一)

单例模式一 官方定义二 单例模式八种方式2.1 饿汉式&#xff08;静态常量&#xff09;代码案例案例分析2.2 饿汉式&#xff08;静态代码块&#xff09;代码案例案例分析2.3 懒汉式(线程不安全)代码案例案例分析2.4 懒汉式(线程安全&#xff0c;同步方法)代码案例案例分析2.5 懒…

数据要求说明书(GB856T——88)基于协同的在线表格forture-sheet

数据要求说明书 1引言 1.1编写目的 本份数据要求说明书详细的提供了系统中各个数据的流向&#xff0c;是设计数据库的关键所在。为以后的编码以及测试提供一份可靠的依据。 预期的读者&#xff1a;系统开发人员、系统测试人员、系统维护人员 1.2背景 待开发的数据库名称&a…

揭秘百度智能测试在测试定位领域的实践

以前&#xff0c;我们介绍了测试活动测试输入、测试执行、测试分析、测试定位和测试评估五个步骤中测试输入、执行、分析、评估的智能化研究和实践&#xff0c;本文重点介绍测试定位环节的智能化实践。 测试定位的主要作用是在构建失败或问题发生后&#xff0c;快速给出产生该现…

机器学习之回归

回归算法 线性回归 求解线性回归方法 正规方程梯度下降 迭代 API sklearn.linear_model.LinearRegression 正规方程优化fit_intercept 是否计算偏置量&#xff0c;没有的化经过原点属性 coef_ 回归系数intercept_ 偏置量 sklearn.linear_model.SGDRegressor 使用随机梯度…

转行了!文科生转程序员的外包工作经历分享

01 种子 我是一名文科生&#xff0c;法律专业&#xff0c;武汉某 211 &#xff0c;入这行纯属巧合。 大三下半年&#xff0c;大家纷纷准备秋招&#xff0c;我去校园招聘会上溜达了一圈&#xff0c;好奇而去&#xff0c;丧气而归。 或许是因为大学三年过得太过安逸(宅在宿舍打…

C#语言实例源码系列-实现本地磁盘目录

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

POMO: Policy Optimization with Multiple Optima for Reinforcement Learning学习笔记

文章目录摘要零、一些基础1.梯度近似2.策略梯度定理3.REINFORCE4.REINFORCE with Baseline5.REINFORCE Actor-Critic一、介绍二、相关工作&#xff08;1&#xff09;深度强化学习构建法&#xff08;2&#xff09;推理技术&#xff08;3&#xff09;深度强化学习改善法三、激励四…

制作 iOS 证书

准备工作 您需要 注册并加入 Apple Developer Program&#xff0c;才能在 App Store 上架应用。请准备一台 macOS 系统的电脑&#xff0c;用于证书制作。 创建 App ID 登录 Apple Developer&#xff0c;选择 Certificates, Identifiers & Profiles 选项。 选择 Identifi…

自学编程和计算机科班出身的差别在哪里

前不久逛知乎的时候看到一个问题&#xff1a;自学编程和计算机科班出身的差别在哪里&#xff1f; 自己回答了一下&#xff0c;获得了比较多的点赞和评论&#xff0c;在这里也分享给大家。 985 通信专业学长&#xff0c;转行程序员&#xff0c;聊一聊我的看法&#xff1a;说一千…

k8s之Job 与 CronJob

写在前面 语雀原文阅读效果更佳&#xff1a; 5、Job与CronJob 语雀 《5、Job与CronJob》 Job 与 CronJob 接下来给大家介绍另外一类资源对象&#xff1a;Job&#xff0c;我们在日常的工作中经常都会遇到一些需要进行批量数据处理和分析的需求&#xff0c;当然也会有按时间来…

RK3568平台开发系列讲解(工具命令篇)常用 GIT 命令汇总

🚀返回专栏总目录 文章目录 一、GIT BASICS二、GIT DIFF三、UNDOING CHANGES四、REWRITING GIT HISTORY五、GIT BRANCHES六、REMOTE REPOSITORIES七、GIT CONFIG八、GIT LOG九、GIT RESET十、GIT PULL十一、GIT PUSH沉淀、分享、成长,让自己和他人都能有所收获!😄 一、GI…

基于51单片机的酒精气体检测器设计

使用说明&#xff1a; 上电以后&#xff0c;需要预热一段时间&#xff0c;此时lcd显示Loading... &#xff08;预热过程为电压先上升后下降的改成&#xff0c;通过检测电压来检测是否预热完成&#xff09; &#xff0c; 预热完成后显示酒精浓度&#xff0c;按下按下按键key1即…

MySQL:互联网公司常用分库分表方案汇总

本文目录 一、数据库瓶颈 IO瓶颈 CPU瓶颈 二、分库分表 水平分库 水平分表 垂直分库 垂直分表 三、分库分表工具 四、分库分表步骤 五、分库分表问题 非partition key的查询问题 非partition key跨库跨表分页查询问题 扩容问题 六、分库分表总结 七、分库分表示例 …