【Python百日进阶-数据分析】Day134 - plotly饼图:go.pie()实例

news2025/1/31 7:58:46

文章目录

    • 4.2 go.Pie() 的基本饼图
      • 4.2.1 基本饼图
      • 4.2.2 样式饼图
      • 4.2.3 使用 uniformtext 控制文本字体大小
      • 4.2.4 控制饼图中的文本方向
      • 4.2.5 甜甜圈图
      • 4.2.6 从中心拉出扇区
      • 4.2.7 子图中的饼图
      • 4.2.8 自定义颜色集的子图
      • 4.2.9 绘制面积与总计数成比例的图表
      • 4.2.10 旭日图
      • 4.2.11 Dash中使用go.pie()

4.2 go.Pie() 的基本饼图

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

在go.Pie中,由饼图的扇区可视化的数据设置在 中values。扇区标签设置在labels. 扇区颜色设置在 中marker.colors。

如果您正在寻找多级分层饼状图表,请转到 Sunburst 教程。

4.2.1 基本饼图

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [4500, 2500, 1053, 500]

fig = go.Figure(data=[go.Pie(labels=labels, values=values)])
fig.show()

在这里插入图片描述

4.2.2 样式饼图

颜色可以以 RGB 三元组或十六进制字符串的形式给出,或者使用CSS 颜色名称如下。

import plotly.graph_objects as go
colors = ['gold', 'mediumturquoise', 'darkorange', 'lightgreen']

fig = go.Figure(data=[go.Pie(labels=['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen'],
                             values=[4500,2500,1053,500])])
fig.update_traces(hoverinfo='label+percent', textinfo='value', textfont_size=20,
                  marker=dict(colors=colors, line=dict(color='#000000', width=2)))
fig.show()

在这里插入图片描述

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

如果您希望所有文本标签具有相同的大小,可以使用uniformtextlayout 参数。该minsize属性设置字体大小,该mode属性设置不适合所需字体大小的标签会发生什么:hide它们或show溢出的标签。在下面的示例中,我们还强制文本位于内部textposition,否则不适合的文本标签将显示在扇形扇区之外。

import plotly.express as px

df = px.data.gapminder().query("continent == 'Asia'")
print(df)
'''
          country continent  year  ...    gdpPercap  iso_alpha  iso_num
0     Afghanistan      Asia  1952  ...   779.445314        AFG        4
1     Afghanistan      Asia  1957  ...   820.853030        AFG        4
2     Afghanistan      Asia  1962  ...   853.100710        AFG        4
3     Afghanistan      Asia  1967  ...   836.197138        AFG        4
4     Afghanistan      Asia  1972  ...   739.981106        AFG        4
...           ...       ...   ...  ...          ...        ...      ...
1675  Yemen, Rep.      Asia  1987  ...  1971.741538        YEM      887
1676  Yemen, Rep.      Asia  1992  ...  1879.496673        YEM      887
1677  Yemen, Rep.      Asia  1997  ...  2117.484526        YEM      887
1678  Yemen, Rep.      Asia  2002  ...  2234.820827        YEM      887
1679  Yemen, Rep.      Asia  2007  ...  2280.769906        YEM      887

[396 rows x 8 columns]
'''
fig = px.pie(df, values='pop', names='country')
fig.update_traces(textposition='inside')
fig.update_layout(uniformtext_minsize=12, uniformtext_mode='hide')
fig.show()

在这里插入图片描述

4.2.4 控制饼图中的文本方向

该insidetextorientation属性控制扇区内文本的方向。使用“自动”,文本可以自动旋转以适应切片内的最大尺寸。使用 “horizo​​ntal” (resp. “radial”, “tangential”) 强制文本是水平的 (resp. Radial or tangential)

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

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [4500, 2500, 1053, 500]

fig = go.Figure(data=[go.Pie(labels=labels,
                             values=values, 
                             textinfo='label+percent',
                             insidetextorientation='radial'
                            )])
fig.show()

在这里插入图片描述

4.2.5 甜甜圈图

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [4500, 2500, 1053, 500]

# 使用“hole”创建类似甜甜圈的饼图
fig = go.Figure(data=[go.Pie(labels=labels, values=values, hole=.3)])
fig.show()

在这里插入图片描述

4.2.6 从中心拉出扇区

对于饼图的“拉出”或“展开”布局,请使用pull参数。它可以是拉动所有扇区的标量,也可以是仅拉动某些扇区的数组。

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [4500, 2500, 1053, 500]

# 拉力以饼图半径的一小部分给出
fig = go.Figure(data=[go.Pie(labels=labels, values=values, pull=[0, 0, 0.2, 0])])
fig.show()

在这里插入图片描述

4.2.7 子图中的饼图

import plotly.graph_objects as go
from plotly.subplots import make_subplots

labels = ["US", "China", "European Union", "Russian Federation", "Brazil", "India",
          "Rest of World"]

# 创建子地块:对饼图子地块使用“domain”类型
fig = make_subplots(rows=1, cols=2, specs=[[{'type':'domain'}, {'type':'domain'}]])
fig.add_trace(go.Pie(labels=labels, values=[16, 15, 12, 6, 5, 4, 42], name="GHG Emissions"),
              1, 1)
fig.add_trace(go.Pie(labels=labels, values=[27, 11, 25, 8, 1, 3, 25], name="CO2 Emissions"),
              1, 2)

# 使用“hole”创建类似甜甜圈的饼图
fig.update_traces(hole=.4, hoverinfo="label+percent+name")

fig.update_layout(
    title_text="Global Emissions 1990-2011",
    # 在甜甜圈馅饼的中心添加注释。
    annotations=[dict(text='GHG', x=0.18, y=0.5, font_size=20, showarrow=False),
                 dict(text='CO2', x=0.82, y=0.5, font_size=20, showarrow=False)])
fig.show()

在这里插入图片描述

4.2.8 自定义颜色集的子图

import plotly.graph_objects as go
from plotly.subplots import make_subplots

labels = ['1st', '2nd', '3rd', '4th', '5th']

# 定义绘画的颜色集
night_colors = ['rgb(56, 75, 126)', 'rgb(18, 36, 37)', 'rgb(34, 53, 101)',
                'rgb(36, 55, 57)', 'rgb(6, 4, 4)']
sunflowers_colors = ['rgb(177, 127, 38)', 'rgb(205, 152, 36)', 'rgb(99, 79, 37)',
                     'rgb(129, 180, 179)', 'rgb(124, 103, 37)']
irises_colors = ['rgb(33, 75, 99)', 'rgb(79, 129, 102)', 'rgb(151, 179, 100)',
                 'rgb(175, 49, 35)', 'rgb(36, 73, 147)']
cafe_colors =  ['rgb(146, 123, 21)', 'rgb(177, 180, 34)', 'rgb(206, 206, 40)',
                'rgb(175, 51, 21)', 'rgb(35, 36, 21)']

# 使用饼图的“domain”类型创建子图
specs = [[{'type':'domain'}, {'type':'domain'}], [{'type':'domain'}, {'type':'domain'}]]
fig = make_subplots(rows=2, cols=2, specs=specs)

# 定义饼图
fig.add_trace(go.Pie(labels=labels, values=[38, 27, 18, 10, 7], name='星夜黑',
                     marker_colors=night_colors), 1, 1)
fig.add_trace(go.Pie(labels=labels, values=[28, 26, 21, 15, 10], name='向日葵',
                     marker_colors=sunflowers_colors), 1, 2)
fig.add_trace(go.Pie(labels=labels, values=[38, 19, 16, 14, 13], name='鸢尾花',
                     marker_colors=irises_colors), 2, 1)
fig.add_trace(go.Pie(labels=labels, values=[31, 24, 19, 18, 8], name='咖啡色',
                     marker_colors=cafe_colors), 2, 2)

# 调整布局和悬停信息
fig.update_traces(hoverinfo='label+percent+name', textinfo='none')
fig.update(layout_title_text='梵高:按比例显示的5种最突出的颜色',
           layout_showlegend=False)

fig = go.Figure(fig)
fig.show()

在这里插入图片描述

4.2.9 绘制面积与总计数成比例的图表

相同的地块scalegroup用与其总大小成比例的面积表示。

import plotly.graph_objects as go
from plotly.subplots import make_subplots

labels = ["Asia", "Europe", "Africa", "Americas", "Oceania"]

fig = make_subplots(1, 2, specs=[[{'type':'domain'}, {'type':'domain'}]],
                    subplot_titles=['1980', '2007'])
fig.add_trace(go.Pie(labels=labels, values=[4, 7, 1, 7, 0.5], scalegroup='one',
                     name="1980世界GDP"), 1, 1)
fig.add_trace(go.Pie(labels=labels, values=[21, 15, 3, 19, 1], scalegroup='one',
                     name="2007世界GDP"), 1, 2)

fig.update_layout(title_text='世界GDP')
fig.show()

在这里插入图片描述

4.2.10 旭日图

对于表示分层数据的多级饼图,您可以使用Sunburst图表。下面给出了一个简单的示例,有关更多信息,请参阅有关 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],
))
fig.update_layout(margin = dict(t=0, l=0, r=0, b=0))

fig.show()

在这里插入图片描述

4.2.11 Dash中使用go.pie()

import plotly.graph_objects as go # or plotly.express as px

import dash
from dash import html, dcc


labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [4500, 2500, 1053, 500]

fig = go.Figure(data=[go.Pie(labels=labels, values=values)])
# fig = go.Figure() # or any Plotly Express function e.g. px.bar(...)
# fig.add_trace( ... )
# fig.update_layout( ... )
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/104784.html

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

相关文章

电脑软件、微信多开

因为办公需要在电脑上登录 2 个微信,但是直接双击微信图标只有 1 个登录界面,无法是现实登录 2 个微信。那么怎么才能在 1 个电脑上打开 2 个微信,方法有四种:1、安装;2、Enter;3、连续点击;4、…

『 canvas 特效』一文教你绘制绚丽的星空背景 TS + ES6

介绍 很久没有写关于 canvas 效果的文章了,刚好最近又学到了一个新的特效,使用 canvas 绘制多层次动态星空背景,今天就分享给大家。首先我们依旧来看一下最终实现的效果,如图所示: 由于录制 GIF 造成失帧,…

实战三十三:STAMP算法实现商品推荐实战 代码+数据

1.案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。STAMP推荐…

记录Win7系统下的node版本升级过程及后续项目启动所遇问题

目录 Windows7系统如何“安装”高版本Node 后续项目运行启动时遇到的问题 Bug : 背景 : 银行内网开发,接到一个新的项目开发,但前提因为开发所使用的云桌面更换了,由原来的Windows10系统降到了现在的Windows7系统&am…

【自媒体必备】AI文字转语音,支持多种人声选择,在线生成一键导出【电脑永久版】

AI文字转语音,支持多种人声选择,在线生成一键导出 软件是电脑版安装版本,大家根据自己安软件的习惯进行安装即可,安装后打开软件即可,且完全免费。语音选择方面就有晓晓、云扬、云希等等常用选择。点击后面的播放按钮…

腾讯大佬告诉你,写Python到底用什么IDE合适

不管你是 Python 新手还是老鸟,肯定纠结过一个问题: 到底用什么编辑器写 Python 代码好? 为此,我们调查了数十位鹅厂程序猿们爱用的 Python IDE,从他们对每款编辑器的看法中,也许能给你一点启示&#xff1…

我对程序员做副业有这几点建议

疫情这几年,“副业”的概念非常火。各大平台上都在说“副业赚钱”、“副业是刚需”等相关的内容、视频,有免费的,还有付费观看的。 其实在2020年疫情之前,大家对于“副业”并没有很关心。 从百度指数上可以明显看出,…

【笔记】Pade Approximations

1 pade approximations是什么? Pad Approximations是一种对pure delay使用常规传函进行近似替换的方法,matlab提供了的一个库函数pade。 在传递函数中,用e−τse^{-\tau s}e−τs表示纯延时pure delay环节,它对信号的幅值不会有任…

微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.2 Nacos的服务注册表结构是怎样的? 54.2.1 多级存储模型

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务面试篇 文章目录微服务框架微服务面试篇54 微服务篇54.2 Nacos的服务注册表结构是怎样的?54.2.1 多级存储模型54 微服务篇…

《Redis实战篇》四、分布式锁

文章目录4.1 基本原理和实现方式对比4.2 Redis分布式锁的实现核心思路4.3 实现分布式锁版本一4.4 Redis分布式锁误删情况说明4.5 解决Redis分布式锁误删问题4.6 分布式锁的原子性问题4.7 Lua脚本解决多条命令原子性问题4.8 利用Java代码调用Lua脚本改造分布式锁4.1 基本原理和实…

Oracle时间函数

Oracle 时间函数INTERVAL间隔一年间隔一天间隔一小时间隔一分钟NUMTODSINTERVAL间隔一天间隔一小时间隔一分钟MyBatis xml 中计算时间间隔需要处理的问题INTERVAL 函数整合到 MyBatis$ 符号拼接 sql 源码追踪NUMTODSINTERVAL 函数整合到 MyBatisOracle 时间间隔函数有INTERVAL、…

%25 express 中的中间件

1、express 中的中间件 (1)、当客户端的请求到达 express 服务器后,会连续调用多个中间件,对请求进行预处理 (2)、本质是一个 function 处理函数(与普通路由函数相比,形参中多了 next 参数&…

深入分析广告和电商结合的逻辑,针对性推出一套广告电商方案

大家好,我是林工,本期林工给大家深入分析广告和电商结合的逻辑,针对性推出一套广告电商方案。 对于消费者来说,广告要发挥引导、刺激并满足消费者需求的作用,首先要使广告传播的信息引人注意,激发消费者购…

掌握Qt构造系统

1. 前言 ​对于日常在Qt或者Visual Studio等**集成开发环境(即IDE)**中编码的开发者来说,构造系统通常是比较容易被忽略的部分。集成开发环境配置简单,界面友好,可以提高开发效率。 ​随着对开发环境的深度使用&…

2.0、Hibernate-级联关系

2.0、Hibernate-级联关系 级联关系 中 最为常见的就是 -> 1、一对多关系 :一个消费者可以购买多个商品 -> 生成多个订单; 消费者是1,订单是多 那么在数据库中,1 的一方是主表,多的一方是从表,通过主外键关系去维…

C# Winform 三层架构

一、介绍 三层架构是 C# 桌面开发中比较常用的框架,是由 表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构组成,目的是为了 “高内聚,低耦合”。开发人员分工更明…

深度学习入门(六十五)循环神经网络——序列到序列学习(seq2seq)

深度学习入门(六十五)循环神经网络——序列到序列学习(seq2seq)前言循环神经网络——序列到序列学习(seq2seq)课件机器翻译seq2seq编码器-解码器细节训练衡量生成序列的好坏的BLEU总结教材1 编码器2 解码器…

为什么世界500强企业都要求员工必须学Python编程语言?

行业的更迭与进化并非虚无缥缈,它就发生在我们每天的生活中。当代最具竞争力的技能是什么?高盛、JP 摩根、麦肯锡等顶级公司纷纷给出了答案——编程。 今年新加入摩根大通的全部资产管理分析师必须强制学习编程语言,Python。 摩根大通资产管…

【Java异常】处理异常

一:异常的处理:抓抛处理 过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象并将此对象抛出一旦抛出对象以后,其后的代码不再执行 过程二:&…

科班演员陶弈菱:北京电影学院的系统学习是我艺术道路上最大的底气

今天的记忆是带着海水的味道………”12月18日,在年末岁尾之际,徽风皖韵熏陶下成长的新生代演员陶奕菱再次来到海南三亚,受邀参加第四届海南岛国际电影节,迫不及待地跑向沙滩面朝大海,感受多姿多彩的魅力三亚。 优雅端…