Pyecharts 箱线图

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

pyecharts绘制一个箱线图

分析:

箱线图 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 的箱线图和 MatplotlibSeaborn 的箱线图有点不一样,它是不会显示出异常值的。不过 Pyecharts 的箱线图交互性比较好,当鼠标移到箱线图上面时,会用一个提示框把统计数据清晰地显示出来,如下图所示。

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

pyecharts多个箱线图

分析:

# 转为二维列表
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,浏览器效果如下图所示。

pyecharts箱线图横向显示

分析:

箱线图默认是纵向显示,如果想要改为横向显示,我们也是使用之前介绍的 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,浏览器效果如下图所示。

pyecharts箱线图改变颜色

分析:

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

上一篇: Pyecharts 饼状图

下一篇: Pyecharts K 线图

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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