Pyecharts 饼状图

Pyecharts 饼状图语法

在 Pyecharts 中,我们可以使用 Pie 这个模块来绘制一个饼状图。饼状图的主要作用是:展示各个部分在总和中的比例。

语法:

pie = Pie()
pie.add(series_name, data_pair)

说明:

折线图柱状图等不一样,饼状图是使用 add() 方法来添加数据的。参数 series_name 是一个必选参数,用于定义系列名。参数 data_pair 也是一个必选参数,用于定义饼状图的数据。

示例 1:基本饼状图

import numpy as np
import pandas as pd
from pyecharts.charts import Pie

# 数据
data = [
    ['蜘蛛侠', 8.9],
    ['蝙蝠侠', 4.1],
    ['钢铁侠', 12.1],
    ['毒液', 8.5],
    ['海王', 11.5]
]
df = pd.DataFrame(data, columns=['电影', '票房'])
df_array = np.array(df)                # 转换为数组
df_list = df_array.tolist()            # 转换为列表

# 绘图
pie = Pie()
pie.add(series_name='', data_pair=df_list)

# 渲染
pie.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts饼状图

分析:

对于饼状图的 add() 方法来说,series_name 是一个必选参数,如果你懒得写内容,可以给它赋值一个空字符串。参数 data_pair 的值要求是一个列表,下面 2 种方式都是可行的。其中,每一项的第 1 个元素是选项名,第 2 个元素是对应的值。

# 方式1
[
    ['蜘蛛侠', 8.9],
    ['蝙蝠侠', 4.1],
    ['钢铁侠', 12.1],
    ['毒液', 8.5],
    ['海王', 11.5]
]
# 方式2
[
    ('蜘蛛侠', 8.9),
    ('蝙蝠侠', 4.1),
    ('钢铁侠', 12.1),
    ('毒液', 8.5),
    ('海王', 11.5)
]

这里小伙伴肯定就会问了:“data 这个变量一开始不就是像上面这样的二维列表吗?为什么后面还要多次一举先转换成一个 DataFrame,然后再转换为二维列表呢?” 其实这是因为在实际开发中,数据一般是存放在外部文件中,而不是像上面这个例子那样在代码中定义的。如果数据存放在外部文件中,我们就必须先用 Pandas 来读取,此时获得的本质上是一个 DataFrame。然后我们还要将这个 DataFrame 转换成二维列表才行。

df_array = np.array(df)                # 将DataFrame转换为数组
df_list = df_array.tolist()            # 将数组转换为列表

上面这两句代码的作用是将一个 DataFrame 转换为一个列表,这是使用了数据分析的方法,小伙伴们自行回去复习一下 NumPy 以及 Pandas 的相关内容。

Pyecharts 饼状图样式

在 Pyecharts 中,对于饼状图的自定义样式,主要包括 3 个方面:① 标签格式;② 圆环图;③ 多饼图。

1. 标签格式

对于饼状图来说,我们可以使用 set_series_opts() 方法结合 label_opts 参数来对标签进行自定义格式。

示例 2:自定义标签格式

import numpy as np
import pandas as pd
from pyecharts.charts import Pie
import pyecharts.options as opts

# 数据
data = [
    ['蜘蛛侠', 8.9],
    ['蝙蝠侠', 4.1],
    ['钢铁侠', 12.1],
    ['毒液', 8.5],
    ['海王', 11.5],
]
df = pd.DataFrame(data, columns=['电影', '票房'])
df_array = np.array(df)                # 转换为数组
df_list = df_array.tolist()            # 转换为列表

# 绘图
pie = Pie()
pie.add(series_name='', data_pair=df_list)
# 定义标签格式
pie.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{c}亿美元'))

# 渲染
pie.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts饼状图定义标签格式

分析:

对于 formatter='{b}:{c}亿美元' 来说,{b} 是数据名,{c} 是数据值。

示例 3:显示百分比

import numpy as np
import pandas as pd
from pyecharts.charts import Pie
import pyecharts.options as opts

# 数据
data = [
    ['蜘蛛侠', 8.9],
    ['蝙蝠侠', 4.1],
    ['钢铁侠', 12.1],
    ['毒液', 8.5],
    ['海王', 11.5],
]
df = pd.DataFrame(data, columns=['电影', '票房'])
df_array = np.array(df)                # 转换为数组
df_list = df_array.tolist()            # 转换为列表

# 绘图
pie = Pie()
pie.add(series_name='', data_pair=df_list)
# 定义标签格式
pie.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{d}%'))

# 渲染
pie.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts饼状图显示百分比

分析:

默认情况下,Pyecharts 中的饼状图显示的是具体数据,而不是显示百分比。如果想要使用百分比来表示,我们可以对标签进行自定义设置。对于 formatter='{b}:{d}%' 来说,{b} 是数据名,{d} 是百分比。

2. 圆环图

圆环图,也叫做 “环形图”。在 Pyecharts 中,我们可以使用 add() 方法的 radius 参数来定义饼状图的内半径和外半径,从而实现一个圆环图。

语法:

obj.add(
    ……
    radius=[内半径, 外半径]
)

说明:

参数 radius 的取值是一个列表,第 1 个元素用于定义内半径,第 2 个元素用于定义外半径。

示例 4:圆环图

import numpy as np
import pandas as pd
from pyecharts.charts import Pie

# 数据
data = [
    ['蜘蛛侠', 8.9],
    ['蝙蝠侠', 4.1],
    ['钢铁侠', 12.1],
    ['毒液', 8.5],
    ['海王', 11.5],
]
df = pd.DataFrame(data, columns=['电影', '票房'])
df_array = np.array(df)                # 转换为数组
df_list = df_array.tolist()            # 转换为列表

# 绘图
pie = Pie()
pie.add(
    series_name='', 
    data_pair=df_list,
    radius=['30%', '75%'],
)

# 渲染
pie.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts圆环图

3. 多饼图

如果想要实现多饼图,我们需要调用多次 add() 方法,然后使用 center 参数来控制每一个饼状图的位置。

语法:

obj.add(
    ……
    center=[x轴位置, y轴位置]
)

说明:

参数 center 的取值是一个列表,第 1 个元素用于定义 x 轴位置,第 2 个元素用于定义 y 轴位置。

示例 5:多饼图

import numpy as np
import pandas as pd
from pyecharts.charts import Pie
import pyecharts.options as opts

# 数据
data = [
    ['蜘蛛侠', 8.9],
    ['蝙蝠侠', 4.1],
    ['钢铁侠', 12.1],
    ['毒液', 8.5],
    ['海王', 11.5],
]
df = pd.DataFrame(data, columns=['电影', '票房'])
df_array = np.array(df)                # 转换为数组
df_list = df_array.tolist()            # 转换为列表
sum = df['票房'].sum()

# 绘图
pie = Pie()
# 第1个饼图
pie.add(
    series_name='', 
    data_pair=[df_list[0], ('其他', sum)],
    radius=[30, 60],
    center=['20%', '30%']
)
# 第2个饼图
pie.add(
    series_name='', 
    data_pair=[df_list[1], ('其他', sum)],
    radius=[30, 60],
    center=['55%', '30%']
)
# 第3个饼图
pie.add(
    series_name='', 
    data_pair=[df_list[2], ('其他', sum)],
    radius=[30, 60],
    center=['20%', '70%']
)
# 第4个饼图
pie.add(
    series_name='', 
    data_pair=[df_list[3], ('其他', sum)],
    radius=[30, 60],
    center=['55%', '70%']
)

# 定义标签格式
pie.set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{d}%'))

# 渲染
pie.render()

运行生成的 render.html,浏览器效果如下图所示。

pyecharts多饼图

分析:

对于多饼图来说,有多少个饼状图,就调用多少次 add() 方法。每一个饼状图,我们都需要使用 center 这个参数来控制它的位置。

上一篇: Pyecharts 散点图

下一篇: Pyecharts 箱线图

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号