Pyecharts 水球图语法
在 Pyecharts 中,我们可以使用 Liquid 这个模块来绘制一个水球图。水球图是一种适合于展示单个百分比数据的图表。
语法:
lq = Liquid()
lq.add(series_name, data)
说明:
对于水球图来说,它使用的也是 add() 方法。参数 series_name 用于定义系列名,参数 data 用于定义数据部分。
示例 1:Pyecharts 绘制水球图
from pyecharts.charts import Liquid
# 数据
data = [0.8]
# 绘图
lq = Liquid()
lq.add(series_name='票房占比', data=data)
# 渲染
lq.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
需要注意的是,参数 data 的取值要求是一个一维列表,列表的元素取值是一个 0.0 ~ 1.0 之间的浮点数。接下来我们再来看一个具体的实例,然后看看水球图是怎么使用的。
示例 2:水球图案例
import pandas as pd
from pyecharts.charts import Liquid
# 数据
data = [
['蜘蛛侠', 8.9],
['蝙蝠侠', 4.1],
['钢铁侠', 12.1],
['毒液', 8.5],
['海王', 11.5]
]
df = pd.DataFrame(data, columns=['电影', '票房'])
# 获取票房总和
total = df['票房'].sum()
# 获取所占百分比
percent = [df.loc[0].at['票房'] / total]
# 绘图
lq = Liquid()
lq.add(series_name='票房占比', data=percent)
# 渲染
lq.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
在这个例子中,我们是先求出 “蜘蛛侠” 票房占总票房的百分比,然后使用水球图来展示出来。
Pyecharts 水球图样式
在 Pyecharts 中,对于水球图的自定义样式,主要包括 3 个方面:① 水球形状;② 关闭动画;③ 多水球图。
1. 水球形状
在 Pyecharts 中,我们可以使用 add() 方法的 shape 参数来定义水球的形状。对于 shape 参数来说,它常用取值如下表所示。
| 取值 | 说明 |
|---|---|
| circle(默认值) | 圆形 |
| rect | 矩形 |
| triangle | 三角形 |
| diamond | 钻石 |
| pin | 针形 |
| arrow | 箭头 |
示例 3:水球形状
from pyecharts.charts import Liquid
# 数据
data = [0.8]
# 绘图
lq = Liquid()
lq.add(series_name='票房占比', data=data, shape='rect')
# 渲染
lq.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
shape='rect' 表示将水球图的形状设置成 “矩形” 。当我们使用 shape 的值依次修改为 'triangle'、'diamond'、'pin'、'arrow',此时效果如下图所示。




2. 关闭动画
默认情况下,水球图会有一个波浪动画。在 Pyecharts 中,我们可以使用 add() 方法的 is_animation 参数来关闭动画。is_animation 的取值是一个布尔值,也就是 True 或 False。
示例 4:
from pyecharts.charts import Liquid
# 数据
data = [0.8]
# 绘图
lq = Liquid()
lq.add(series_name='票房占比', data=data, is_animation=False)
# 渲染
lq.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
使用了 is_animation=False 之后,水球图的动画就被关闭了。
3. 多水球图
如果想要实现多水球图,我们需要调用多次 add() 方法,然后使用 center 参数来控制每一个饼状图的位置。多水球图和多饼图的实现方式是一样的,小伙伴们可以对比理解一下。
语法:
obj.add(
……
center=[x轴位置, y轴位置]
)
说明:
参数 center 的取值是一个列表,第 1 个元素用于定义 x 轴位置,第 2 个元素用于定义 y 轴位置。
示例 5:
import pandas as pd
from pyecharts.charts import Liquid
# 数据
data = [
['蜘蛛侠', 8.9],
['蝙蝠侠', 4.1],
['钢铁侠', 12.1],
['毒液', 8.5],
['海王', 11.5]
]
df = pd.DataFrame(data, columns=['电影', '票房'])
total = df['票房'].sum()
percent1 = [df.loc[0].at['票房'] / total]
percent2 = [df.loc[1].at['票房'] / total]
# 绘图
lq = Liquid()
lq.add(series_name='蜘蛛侠', data=percent1, center=['60%', '50%'])
lq.add(series_name='蝙蝠侠', data=percent2, center=['25%', '50%'])
# 渲染
lq.render()
运行生成的 render.html,浏览器效果如下图所示。

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