Pyecharts 箱线图语法
在 Pyecharts 中,我们可以使用 Boxplot 这个模块来绘制一个箱线图。箱线图的主要作用有 2 个:① 查看数据分布情况;② 判断是否有异常值。
语法:
box = Boxplot()
box.add_xaxis(xaxis_data)
box.add_yaxis(series_name, y_axis)
说明:
箱线图和折线图的语法是一样的,首先使用 Boxplot() 创建一个箱线图对象 box,然后调用该对象下面的 add_xaxis() 方法来添加 x 轴数据,以及调用 add_yaxis() 方法来添加 y 轴数据。
示例 1:一个箱线图
import pandas as pd
from pyecharts.charts import Boxplot
# 数据
data = [
['张三', 24],
['李四', 18],
['王五', 37],
['小芳', 24],
['小红', 12],
['小明', 42],
['小华', 56],
['小莉', 67],
['小英', 45],
['小军', 120]
]
df = pd.DataFrame(data, columns=['姓名', '年龄'])
# 转换为二维列表
ages=[]
ages.append(list(df['年龄']))
# 绘图
box = Boxplot()
box.add_xaxis(['年龄'])
box.add_yaxis(series_name='', y_axis=box.prepare_data(ages))
# 渲染
box.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
箱线图 add_yaxis() 方法中的 y_axis 参数取值是非常特别的,这一点和其他图表不一样。box.prepare_data(ages) 中的 “box” 指的是箱线图对象,prepare_data() 是箱线图对象下的一个方法,然后 ages 要求是一个二维列表。
# 转换为二维列表
ages=[]
temp=[]
for i in list(df['年龄']):
temp.append(i)
ages.append(temp)
上面这一段代码就是为了拿到这样一个二维列表:[[24, 18, 37, 24, 12, 42, 56, 67, 45, 120]]。小伙伴们一定要记住:箱线图的数据必须是一个二维列表。之所以要求数据部分是一个二维列表,这是因为 pyecharts 可以同时绘制多个箱线图。该二维列表有多少个元素,就会绘制多少个箱线图。
对于这个例子来说,如果你使用 list(df['年龄']) 作为 y_axis 的数据,此时就会报错。这是因为 list(df['年龄']) 得到的是一个一维列表,也就是:[24, 18, 37, 24, 12, 42, 56, 67, 45, 120]。
最后需要注意的是,Pyecharts 的箱线图和 Matplotlib 或 Seaborn 的箱线图有点不一样,它是不会显示出异常值的。不过 Pyecharts 的箱线图交互性比较好,当鼠标移到箱线图上面时,会用一个提示框把统计数据清晰地显示出来,如下图所示。

示例 2:多个箱线图
import pandas as pd
from pyecharts.charts import Boxplot
# 数据
data = [
['张三', 65, 71, 74],
['李四', 61, 50, 67],
['王五', 90, 67, 82],
['小芳', 87, 64, 81],
['小红', 92, 71, 98],
['小明', 87, 94, 82],
['小华', 82, 61, 64],
['小莉', 82, 70, 97],
['小英', 64, 91, 63],
['小军', 62, 71, 58]
]
df = pd.DataFrame(data, columns=['姓名', '语文', '数学', '英语'])
# 转为二维列表
scores = []
scores.append(list(df['语文']))
scores.append(list(df['数学']))
scores.append(list(df['英语']))
# 绘图
box = Boxplot()
box.add_xaxis(['语文', '数学', '英语'])
box.add_yaxis(series_name='各科成绩', y_axis=box.prepare_data(scores))
# 渲染
box.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
# 转为二维列表
scores = []
scores.append(list(df['语文']))
scores.append(list(df['数学']))
scores.append(list(df['英语']))
执行了上面这一段代码时候,我们拿到的 scores 是一个二维列表,也就是下面这个二维列表。
[
[65, 61, 90, 87, 92, 87, 82, 82, 64, 62],
[71, 50, 67, 64, 71, 94, 61, 70, 91, 71],
[74, 67, 82, 81, 98, 82, 64, 97, 63, 58]
]
Pyecharts 箱线图样式
在 Pyecharts 中,我们还可以对箱线图进行一些样式的自定义,主要包括 2 个方面:① 横向显示;② 改变颜色。
示例 3:横向显示
import pandas as pd
from pyecharts.charts import Boxplot
# 数据
data = [
['张三', 24],
['李四', 18],
['王五', 37],
['小芳', 24],
['小红', 12],
['小明', 42],
['小华', 56],
['小莉', 67],
['小英', 45],
['小军', 120]
]
df = pd.DataFrame(data, columns=['姓名', '年龄'])
# 转换为二维列表
ages=[]
ages.append(list(df['年龄']))
# 绘图
box = Boxplot()
box.add_xaxis(['年龄'])
box.add_yaxis(series_name='', y_axis=box.prepare_data(ages))
# 横向显示
box.reversal_axis()
# 渲染
box.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
箱线图默认是纵向显示,如果想要改为横向显示,我们也是使用之前介绍的 reversal_axis() 方法来实现。
示例 4:改变颜色
import pandas as pd
from pyecharts.charts import Boxplot
# 数据
data = [
['张三', 24],
['李四', 18],
['王五', 37],
['小芳', 24],
['小红', 12],
['小明', 42],
['小华', 56],
['小莉', 67],
['小英', 45],
['小军', 120]
]
df = pd.DataFrame(data, columns=['姓名', '年龄'])
# 转换为二维列表
ages=[]
ages.append(list(df['年龄']))
# 绘图
box = Boxplot()
box.add_xaxis(['年龄'])
box.add_yaxis(series_name='', y_axis=box.prepare_data(ages))
# 改变颜色
box.set_colors(['orange'])
# 渲染
box.render()
运行生成的 render.html,浏览器效果如下图所示。

分析:
如果想要改变箱线图的颜色,我们也是使用之前的 set_colors() 方法来实现。但是对于箱线图来说,我们无法使用 color 参数来改变颜色,这是因为箱线图的 add() 方法不存在 color 这个参数。
