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,浏览器效果如下图所示。

分析:
对于饼状图的 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,浏览器效果如下图所示。

分析:
对于 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 中的饼状图显示的是具体数据,而不是显示百分比。如果想要使用百分比来表示,我们可以对标签进行自定义设置。对于 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,浏览器效果如下图所示。

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,浏览器效果如下图所示。

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