label mpchart 饼图_惊叹,Pyecharts绘制饼图原来可以如此漂亮!

2024-03-21 11:20

本文主要是介绍label mpchart 饼图_惊叹,Pyecharts绘制饼图原来可以如此漂亮!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用Pyecharts玩转饼图

饼图在实际的可视化要求中是非常常见的,它能够很好显示个体的占比或者数据情况。本文中讲解的是如何利用 pyecharts 来绘制各种满足不同需求的饼图,包含:基础饼图+改变饼图位置颜色

环状饼图

内嵌饼图

多饼图

玫瑰图

3a6c51b575440f68571c9f9046d825b5.png

开始之前,先来看看部分效果:

注:文末提供本文的源码获取方式,供大家练习

导入库

本文中使用的还是 pandas+pyecharts 组合,在jupyter notebook 中进行绘图。首先导入所需要的各种库:

4d317b4d64cb9a5a5b1d93f57cfd82e9.png基础饼图

模拟数据

我们自行模拟了一份消费数据,包含5个消费项目:住宿+餐饮+交通+服装+红包,具体数据如下:# 生成数据

df = pd.DataFrame({"消费":["住宿","餐饮","交通","服装","红包"],

"数据":[2580,1300,500,900,1300]

})

df

652946f520053ea3d47487ab303be66c.png将消费和数据中的具体数据转成列表形式:[object Object]

代码的具体解释见注释:c = (

Pie()

.add("", [list(z) for z in zip(x_data, y_data)])   # zip函数两个部分组合在一起list(zip(x,y))-----> [(x,y)]

.set_global_opts(title_opts=opts.TitleOpts(title="Pie-月度开支"))  # 标题

.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))  # 数据标签设置

)

c.render_notebook()

b2b1fea8a7f2467e84656067daa322eb.png改变位置和颜色

上面生成的饼图是使用 pyecharts 自带的颜色和位置,有时候我们需要做下改变:

9a39d2956f868742e5ad940b32390e80.png现在我们生成的饼图如下显示:颜色变成了我们设置的颜色

位置更靠左了

6a923578734c40085d9f2ddfe4857a01.png视频效果如下:

改变图例位置

数据生成

上面的图例是水平方向排列的,而且个数比较少。如果我们的图例比较多,需要改成竖直方向,同时实现翻页滚动功能。

在这里我们使用的是 pyecharts 中自带的数据:

1、Faker.choose() :是用来生成数据标签,有3种不同的取值情况

1121825af37211f3762d9784f6eba267.png2、Faker.values() 是用来生成具体的数据,随机生成

3e94e9b9930a09222a5abb64c37e1c2b.png绘图

还是通过上面的绘图方法,加入数据同时添加各种配置项:

196d49dda31d2b053bd9c5af347a1949.png

01de2db1631e35a397f41e5991e9ac6a.png视频效果如下:

环状饼图

环状饼图主要是通过 add 方法中的 radius 参数来实现的。实现过程如下:x_data = ["小明", "小红", "张三", "李四", "王五"]

y_data = [335, 310, 234, 135, 548]

c = (

Pie(init_opts=opts.InitOpts(width="1600px", height="1000px"))   # 图形的大小设置

.add(

series_name="访问来源",

data_pair=[list(z) for z in zip(x_data, y_data)],

radius=["15%", "50%"],   # 饼图内圈和外圈的大小比例

center=["30%", "40%"],   # 饼图的位置:左边距和上边距

label_opts=opts.LabelOpts(is_show=True),   # 显示数据和百分比

)

.set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", orient="vertical"))   # 图例在左边和垂直显示

.set_series_opts(

tooltip_opts=opts.TooltipOpts(

trigger="item", formatter="{a} 
{b}: {c} ({d}%)"

),

)

c.render_notebook()

可以看到图形的中间是空的

acde1adc14ee562e09f876751ac917f3.png内嵌饼图

内嵌饼图是指将两个甚至多个环状饼图放在一起,实现代码过程如下:import pyecharts.options as opts

from pyecharts.charts import Pie

from pyecharts.globals import ThemeType

# 内部饼图

inner_x_data = ["直达", "营销广告", "搜索引擎","产品"]

inner_y_data = [335, 679, 548, 283]

inner_data_pair = [list(z) for z in zip(inner_x_data, inner_y_data)]

# [['直达', 335], ['营销广告', 679], ['搜索引擎', 1548], [‘产品’, 283]]

# 外部环形(嵌套)

outer_x_data = ["搜索引擎", "邮件营销", "直达", "营销广告", "联盟广告", "视频广告", "产品", "百度", "谷歌","邮件营销", "联盟广告"]

outer_y_data = [335, 135, 147, 102, 220, 310, 234, 135, 648, 251]

outer_data_pair = [list(z) for z in zip(outer_x_data, outer_y_data)]

c = (

# 初始化

Pie(init_opts=opts.InitOpts(

width="900px",  # 设置图形大小

height="800px",

theme=ThemeType.SHINE))  # 选择主题

# 内部饼图

.add(

series_name="版本3.2.1",  # 图形名称

center=["50%", "35%"],  # 饼图位置

data_pair=inner_data_pair,  # 系列数据项,格式为 [(key1, value1), (key2, value2)]

radius=["25%", "40%"],  # 饼图半径 数组的第一项是内半径,第二项是外半径

label_opts=opts.LabelOpts(position='inner'), # 标签设置在内部

)

# 外部嵌套环形图

.add(

series_name="版本3.2.9",  # 系列名称

center=["50%", "35%"],  # 饼图位置

radius=["40%", "60%"],  # 饼图半径 数组的第一项是内半径,第二项是外半径

data_pair=outer_data_pair, # 系列数据项,格式为 [(key1, value1), (key2, value2)]

# 标签配置项

label_opts=opts.LabelOpts(

position="outside",

formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",

background_color="#eee",

border_color="#aaa",

border_width=1,

border_radius=4,

rich={

"a": {"color": "#999",

"lineHeight": 22,

"align": "center"},

"abg": {

"backgroundColor": "#e3e3e3",

"width": "100%",

"align": "right",

"height": 22,

"borderRadius": [4, 4, 0, 0],

},

"hr": {

"borderColor": "#aaa",

"width": "100%",

"borderWidth": 0.5,

"height": 0,

},

"b": {"fontSize": 16, "lineHeight": 33},

"per": {

"color": "#eee",

"backgroundColor": "#334455",

"padding": [2, 4],

"borderRadius": 2,

},

},

),

)

# 全局配置项

.set_global_opts(

xaxis_opts = opts.AxisOpts(is_show = False),   #隐藏X轴刻度

yaxis_opts = opts.AxisOpts(is_show = False),    #隐藏Y轴刻度

legend_opts = opts.LegendOpts(is_show = True),  #隐藏图例

title_opts = opts.TitleOpts(title = None),    #隐藏标题

)

# 系统配置项

.set_series_opts(

tooltip_opts=opts.TooltipOpts(

trigger="item",

formatter="{a} 
{b}: {c} ({d}%)"

),

label_opts=opts.LabelOpts(is_show=True)  # 隐藏每个触角标签

)

)

c.render_notebook()

61c36ea322f451cd7805e7a472a07a45.png视频效果如下:

多饼图

有时候我们需要将多个图形放在一个大画布中,需要用到子图的制作。

在下面的代码中每个 add() 都是一个图形的绘制,我们绘制了4个饼图;同时center指定每个图形的位置,radius指定每个饼图内外圈的大小c = (

Pie()

.add(

"",

[list(z) for z in zip(["剧情", "其他"], [30, 70])],

center=["20%", "30%"],  # 位置

radius=[60, 80],   # 每个饼图内外圈的大小

)

.add(

"",

[list(z) for z in zip(["奇幻", "其他"], [40, 60])],

center=["55%", "30%"],

radius=[60, 80],

)

.add(

"",

[list(z) for z in zip(["爱情", "其他"], [24, 76])],

center=["20%", "70%"],

radius=[60, 80],

)

.add(

"",

[list(z) for z in zip(["惊悚", "其他"], [11, 89])],

center=["55%", "70%"],

radius=[60, 80],

)

.set_global_opts(

title_opts=opts.TitleOpts(title="Pie-多饼图基本示例"),

legend_opts=opts.LegendOpts(

type_="scroll", pos_top="20%", pos_left="80%", orient="vertical"

),

)

)

c.render_notebook()

8309193f2b3f0c3f9237ae45b7963786.png视频效果如下:

玫瑰图

玫瑰图中每个部分的大小和粗细都是不同的v = Faker.choose()

c = (

Pie()

.add(

"",

[list(z) for z in zip(v, Faker.values())],   # 两个值

radius=["30%", "60%"],  # 大小

center=["25%", "50%"],  # 位置

rosetype="radius",

label_opts=opts.LabelOpts(is_show=False),  # 不在图形上显示数据

)

.add(

"",

[list(z) for z in zip(v, Faker.values())],

radius=["30%", "60%"],

center=["75%", "50%"],

rosetype="area",

)

.set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰图示例"))

)

c.render_notebook()

e39edbf9f651e7d484b28870943a08d1.png

8944fc38d98023970fe229353a156418.png视频效果如下:

作者简介

Peter,硕士毕业僧一枚,从电子专业自学Python入门数据行业,擅长数据分析及可视化。喜欢数据,坚持跑步,热爱阅读,乐观生活。个人格言:不浮于世,不负于己

个人站点:www.renpeter.cn,欢迎常来小屋逛逛

源码文件获取

为方便大家练习,已将整理好的源代码(jupyter notebook文件)分享给各位同学,大家可以在下面的公众号 「柠檬数据」 回复 pie2020 来获取。

cd3e9bf7dc46cb4d2f65894a3aaddd1b.png

这篇关于label mpchart 饼图_惊叹,Pyecharts绘制饼图原来可以如此漂亮!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832518

相关文章

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

Python绘制土地利用和土地覆盖类型图示例详解

《Python绘制土地利用和土地覆盖类型图示例详解》本文介绍了如何使用Python绘制土地利用和土地覆盖类型图,并提供了详细的代码示例,通过安装所需的库,准备地理数据,使用geopandas和matp... 目录一、所需库的安装二、数据准备三、绘制土地利用和土地覆盖类型图四、代码解释五、其他可视化形式1.

如何用Python绘制简易动态圣诞树

《如何用Python绘制简易动态圣诞树》这篇文章主要给大家介绍了关于如何用Python绘制简易动态圣诞树,文中讲解了如何通过编写代码来实现特定的效果,包括代码的编写技巧和效果的展示,需要的朋友可以参考... 目录代码:效果:总结 代码:import randomimport timefrom math

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户