专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点
  • 专栏福利
    100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战-LMLPHP
    100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战-LMLPHP

1. 箱形图介绍

1)箱形图介绍

100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战-LMLPHP

特点:箱形图是概括性较强的一种图,它能够准确反映出数据的主要特点,包括最大值、最小值、四分位数、中位数和实例数,同时观测异常点。

应用场景:箱形图主要用于比较多组数据的分布情况,它非常适用于表示连续变量的分布和比较,是显著进行数据可视化的一种常用工具。

2)怎么看箱型图?

“盒式图"或叫"盒须图”"箱形图"boxplot(也称箱须图(Box-whiskerPlot)须图又称为箱形图,其绘制须使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同的母体数据时更可表现其差异。

主要包含六个数据节点,将一组数据从大到小排列,分别计算出他的上边缘,上四分位数Q3,中位数,下四分位数Q1,下边缘,还有一个异常值。标示了图中每条线表示的含义,其中应用到了分位值(数)的概念,如下图所示:

100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战-LMLPHP

运行结果

3)解释说明

数学层面理解箱形图每个部分的含义(下四分位线,中位数,上四分位数,上限,下限,异常值,极端异常值):

  • 下四分位数:指数据的25%分位点所对应的值(Q1)
  • 中位数:指数据的50%分位点所对应的值(Q2)
  • 上四分位数:指数据的75%分位点所对应的值(Q3)
  • 上限:上限=Q3+1.5*(Q3-Q1)
  • 下限:下限=Q1-1.5*(Q3-Q1)
  • 异常值的判定标准:当变量的数据值大于上限或小于下限时,判定为异常值

计算方法:

  • 1、.数据集:-15, 7, 10, 15, 20, 33, 5
  • 2、按从小到大的顺序对数据集进行排列:-15, 5, 7, 10, 15, 20, 33
  • 3、确定四分位数索引位置的根据公式:1+(n-1)*数据的百分比分位点,在根据索引位置确定索引所对应的数据值(n是数据集的数量 n=6)
    • Q1_position=1+(6-1)*0.25=2.25 (Q1在第二个数和第三个数之间)
    • Q1_value=15+(36-15)*(2.25-2)=20.25
    • Q2_position=1+(6-1)*0.5=3.5 (Q2在第三个数和第四个数之间)
    • Q2_value=36+(39-36)*(3.5-3)=37.5
    • Q3_position=1+(6-1)*0.75=4.75 (Q3在第四个数和第五个数之间)
    • Q3_value=39+(40-39)*(4.75-4)=39.75
    • 上限=39.75+(39.75-20.25)*1.5=69
    • 下限=20.25-(39.75-20.25)*1.5=-9

极端异常值:

  • 极端上限:上限=Q3+3*(Q3-Q1)
  • 极端下限:下限=Q1-3*(Q3-Q1)
  • 极端异常值的判定标准:当变量的数据值大于极端上限或小于极端下限时,判定为极端异常值

2. 普通箱型图

首先,确保已经安装了Pyecharts库。可以使用以下命令进行安装:

!pip install pyecharts

接下来,我们可以按照以下步骤绘制普通箱形图:

  1. 导入所需的库和模块:
from pyecharts.charts import Boxplot
from pyecharts import options as opts
from pyecharts.globals import ThemeType
  1. 创建一个Boxplot对象,并设置主题:
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
  1. 添加数据和配置项:
boxplot.add_xaxis(x_data)  # 设置x轴数据
boxplot.add_yaxis(series_name, y_data)  # 设置y轴数据和系列名称
boxplot.set_global_opts(title_opts=opts.TitleOpts(title="普通箱形图"))  # 设置标题
  1. 展示图表:
boxplot.render_notebook()

下面是一个完整的示例代码:

from pyecharts.charts import Boxplot
from pyecharts import options as opts
from pyecharts.globals import ThemeType

# 数据
x_data = ["A", "B", "C", "D", "E"]
y_data = [
    [1, 2, 3, 4, 5, 6, 7, 8, 9],
    [2, 3, 4, 5, 6, 7, 8, 9, 10],
    [3, 4, 5, 6, 7, 8, 9, 10, 11],
    [4, 5, 6, 7, 8, 9, 10, 11, 12],
    [5, 6, 7, 8, 9, 10, 11, 12, 13]
]
series_name = "数据"

# 创建Boxplot对象
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))

# 添加数据和配置项
boxplot.add_xaxis(x_data)
boxplot.add_yaxis(series_name, boxplot.prepare_data(y_data))
boxplot.set_global_opts(title_opts=opts.TitleOpts(title="普通箱形图"))

# 展示图表
boxplot.render_notebook()

运行以上代码,即可在Jupyter Notebook中绘制出普通箱形图。可以根据需要调整数据和配置项,以满足具体需求,运行结果:
100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战-LMLPHP

3. 水平箱型图

绘制水平方向箱型图只需要在代码中加上以下两句调转绘制方向即可:

# 设置图表的朝向为水平方向
boxplot.set_global_opts(legend_opts=opts.LegendOpts(orient="vertical"))
boxplot.reversal_axis()

完整源码:

from pyecharts.charts import Boxplot
from pyecharts import options as opts
from pyecharts.globals import ThemeType

# 数据
x_data = ["A", "B", "C", "D", "E"]
y_data = [
    [1, 2, 3, 4, 5, 6, 7, 8, 9],
    [2, 3, 4, 5, 6, 7, 8, 9, 10],
    [3, 4, 5, 6, 7, 8, 9, 10, 11],
    [4, 5, 6, 7, 8, 9, 10, 11, 12],
    [5, 6, 7, 8, 9, 10, 11, 12, 13]
]
series_name = "数据"

# 创建Boxplot对象
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))

# 添加数据和配置项
boxplot.add_xaxis(x_data)
boxplot.add_yaxis(series_name, boxplot.prepare_data(y_data))
boxplot.set_global_opts(title_opts=opts.TitleOpts(title="普通箱形图"))

# 设置图表的朝向为水平方向
boxplot.set_global_opts(legend_opts=opts.LegendOpts(orient="vertical"))
boxplot.reversal_axis()

# 展示图表
boxplot.render_notebook()

运行结果:
100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战-LMLPHP

4. 群组箱型图

from pyecharts import options as opts
from pyecharts.charts import Boxplot
import random

# 生成随机数据
y_data1 = [
    [random.randint(500, 1000) for _ in range(12)],
    [random.randint(500, 1000) for _ in range(12)],
]
y_data2 = [
    [random.randint(100, 500) for _ in range(12)],
    [random.randint(100, 500) for _ in range(12)],
]

c = (
    Boxplot(init_opts=opts.InitOpts(width="800px", height="500px")) # 创建 Boxplot 对象
    .add_xaxis(["expr1", "expr2"]) # 设置 x 轴数据
    .add_yaxis("A组",Boxplot.prepare_data(y_data1)) # 添加第一个 y 轴数据
    .add_yaxis("B组", Boxplot.prepare_data(y_data2)) # 添加第二个 y 轴数据
    .set_global_opts(title_opts=opts.TitleOpts(title="群组箱型图")) # 设置全局参数
)

# 在 Jupyter Notebook 中展示图表
c.render_notebook()

运行结果:
100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战-LMLPHP

5. 带异常点的箱型图

1、导入相关库:在Jupyter Notebook中,需要导入Pyecharts和相关的其他库。可以使用以下代码导入所需的库:

from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.commons.utils import JsCode

2、创建箱型图对象:通过创建Boxplot对象来生成箱型图,并设置相关的属性。可以使用链式调用方法来设置属性。以下是一个示例:

boxplot = (
    Boxplot()
    .add_xaxis(x_data)
    .add_yaxis("boxplot", y_data)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="带异常点的箱型图"),
        xaxis_opts=opts.AxisOpts(name="x轴"),
        yaxis_opts=opts.AxisOpts(name="y轴"),
    )
)

其中,x_data是一个列表,包含了每个箱型图的x轴标签;y_data是一个二维列表,每个子列表包含了每个箱型图的数据。

3、设置异常点:可以通过add_yaxis方法的第二个参数设置异常点。以下是一个示例:

.add_yaxis(
    "boxplot",
    y_data,
    tooltip_opts=opts.TooltipOpts(
        formatter=JsCode(
            "function (params) {return params.name + ': ' + params.value[2];}"
        )
    ),
    markpoint_opts=opts.MarkPointOpts(
        data=[
            opts.MarkPointItem(type_="max", name="最大值"),
            opts.MarkPointItem(type_="min", name="最小值"),
        ]
    ),
)

在这个示例中,通过设置tooltip_opts属性来自定义提示框的显示内容,通过设置markpoint_opts属性来添加最大值和最小值的标记点。

4、渲染图表:最后,可以使用render_notebook方法将图表渲染并输出到Jupyter Notebook中,如下所示:

boxplot.render_notebook()

完整的示例代码如下:

from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.commons.utils import JsCode

# 示例数据
x_data = ["A", "B", "C", "D", "E"]
y_data = [
    [1, 2, 3, 4, 5],
    [2, 4, 6, 8, 10],
    [3, 6, 9, 12, 15],
    [4, 8, 12, 16, 20],
    [5, 10, 15, 20, 25],
]

# 创建箱型图对象
boxplot = (
    Boxplot()
    .add_xaxis(x_data)
    .add_yaxis(
        "boxplot",
        y_data,
        tooltip_opts=opts.TooltipOpts(
            formatter=JsCode(
                "function (params) {return params.name + ': ' + params.value[2];}"
            )
        ),
        markpoint_opts=opts.MarkPointOpts(
            data=[
                opts.MarkPointItem(type_="max", name="最大值"),
                opts.MarkPointItem(type_="min", name="最小值"),
            ]
        ),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="带异常点的箱型图"),
        xaxis_opts=opts.AxisOpts(name="x轴"),
        yaxis_opts=opts.AxisOpts(name="y轴"),
    )
)

# 渲染图表
boxplot.render_notebook()

运行以上代码,即可在Jupyter Notebook中输出带异常点的箱型图:
100天精通Python(可视化篇)——第96天:Pyecharts绘制多种炫酷箱形图参数说明+代码实战-LMLPHP

07-17 11:27