绘制箱线图 与 异常值的输出 - 基于Python matplotlib库

简介: 绘制箱线图 与 异常值的输出 - 基于Python matplotlib库

文章目录

1. 关于箱线图 及 plt.boxplot()方法

2. 绘制一幅简单的箱线图

3. 绘制一幅更精致的图像

4. 异常值的标准

5. 异常值的输出

1. 关于箱线图 及 plt.boxplot()方法

箱线图又称箱形图,有的地方也可以叫盒须图。使用箱线图的好处是可以以一种相对稳定的方式描述数据离散分布情况,识别数据中的异常值。

在pthon的matplotlib库中绘制箱线图使用的是plt.boxplot()方法。


该方法的主要参数如下

参数

描述

x

要绘制箱线图的数据。

notch

是否以凹凸形式展现箱线图,默认为非凹凸。

sym

指定异常点的形状,默认为加号(+)显示。

vert

是否需要将箱形图垂直摆放。

whis

指定上下限与上下四分位的距离。默认为1.5倍的四分位差。

position

指定箱型图的位置。默认为[0, 1, 2]

widths

指定箱型图的宽度,默认为0.5

patch_artist

是否填充箱体颜色

meanline

是否用线的形式表示均值,默认用点的形式来表示。showmeans为True时这个参数才有意义。

showmeans

是否显示均值,默认不显示

showcaps

是否显示箱线图顶端和末端的两条线。默认是不显示的。

showbox

是否显示箱体,默认显示。

showfliers

是否显示异常值,默认显示。

boxprops

设置箱体的属性,如边框色、填充色等。patch_artist为True时填充箱体颜色(facecolor键)才有效。

medianprops

设置中位数的属性,如线的类型、粗细等。

meanprops

设置均值的属性,如点的大小颜色等。

capprops

设置箱型图顶端和末端线条的属性,如颜色、粗细等。

whiskerprops

设置须的属性。如颜色、粗细、线的类型等。

 

2. 绘制一幅简单的箱线图

使用随机数种子随机生成三组随机但固定的数据。以用来绘制三个箱线个体(一张图)。

全局字体使用楷体。

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(1, facecolor='#33ff99', figsize=(10, 6))
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] = '#cc00ff'
np.random.seed(30)
data1 = np.random.randint(20, 100, 200)
data2 = np.random.randint(30, 120, 200)
data3 = np.random.randint(40, 110, 200)
plt.boxplot([data1, data2, data3])
plt.xticks(range(1, 4), ['A型', 'B型', 'C型'], fontsize=20)
plt.yticks(fontsize=20)
plt.title('箱线图', fontsize=25, color='#0033cc')
plt.show()

图像效果如下:

1.png

3. 绘制一幅更精致的图像

下边的数据中,修改了一下数据。上边随机产生的数据因为较为均匀,所以很难产生异常值,达不到箱线图的预期展示效果。


使用 * 符号来标记异常值。并使用线来标出每组数据的均值。

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(1, facecolor='#33ff99', figsize=(10, 6))
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] = '#cc00ff'
np.random.seed(110)
data1 = np.random.randint(20, 100, 200)
data2 = np.random.randint(30, 120, 200)
data3 = np.random.randint(40, 110, 200)
# 修改几个值,作为异常值,方便展示
data1[100:102] = [142, 150]
data3[100:103] = [1, 5, 154]
plt.boxplot([data1, data2, data3],
            notch=True,
            sym='*',
            patch_artist=True,
            boxprops={'color': '#ffff00', 'facecolor': '#0066ff'},
            capprops={'color': '#ff3333', 'linewidth': 2},
            showmeans=True,
            meanline=True
            )
plt.xticks(range(1, 4), ['A型', 'B型', 'C型'], fontsize=20)
plt.yticks(fontsize=20)
plt.title('箱线图', fontsize=25, color='#0033cc')
plt.show()

代码执行效果如下:

1.png

4. 异常值的标准

通过whis参数可以修改判断异常值的标准。默认将不在【均值±1.5倍四分位差】范围内的判断为异常值。


在上述代码的基础上稍作修改:


设置whis=2

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(1, facecolor='#33ff99', figsize=(10, 6))
plt.rcParams['font.sans-serif'] = ['STKAITI']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['axes.facecolor'] = '#cc00ff'
np.random.seed(110)
data1 = np.random.randint(20, 100, 200)
data2 = np.random.randint(30, 120, 200)
data3 = np.random.randint(40, 110, 200)
# 修改几个值,作为异常值,方便展示
data1[100:102] = [142, 150]
data3[100:103] = [1, 5, 154]
plt.boxplot([data1, data2, data3],
            whis=2,
            notch=True,
            sym='*',
            patch_artist=True,
            boxprops={'color': '#ffff00', 'facecolor': '#0066ff'},
            capprops={'color': '#ff3333', 'linewidth': 2},
            showmeans=True,
            meanline=True
            )
plt.xticks(range(1, 4), ['A型', 'B型', 'C型'], fontsize=20)
plt.yticks(fontsize=20)
plt.title('箱线图', fontsize=25, color='#0033cc')
plt.show()

则结果中已经不再有异常值:

1.png

5. 异常值的输出

上文只是将异常值以可视化的方式呈现在了读者眼前。当然,做数据分析时仅仅这样是不够的,通常还需要对数据进行处理,如去除。


下边的python代码来完成异常值的输出:

import numpy as np
np.random.seed(110)
data1 = np.random.randint(20, 100, 200)
data2 = np.random.randint(30, 120, 200)
data3 = np.random.randint(40, 110, 200)
# 修改几个值,作为异常值,方便展示
data1[100:102] = [142, 150]
data3[100:103] = [1, 5, 154]
Q1 = np.quantile(a=data3, q=0.25)
Q3 = np.quantile(a=data3, q=0.75)
# 计算 四分位差
QR = Q3 - Q1
# 下限 与 上线
low_limit = Q1 - 1.5 * QR
up_limit = Q3 + 1.5 * QR
print('下限为:', low_limit)
print('上限为:', up_limit)
print('异常值有:')
print(data3[(data3 < low_limit) + (data3 > up_limit)])

1.png

目录
相关文章
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
4天前
|
数据库 Python
[oeasy]python066_如何捕获多个异常_try_否则_else_exception
本文介绍了Python中`try...except...else`结构的使用方法。主要内容包括: 1. **回顾上次内容**:简要复习了`try`和`except`的基本用法,强调了异常处理的重要性。 2. **详细解释**: - `try`块用于尝试执行代码,一旦发现错误会立即终止并跳转到`except`块。 - `except`块用于捕获特定类型的异常,并进行相应的处理。 - `else`块在没有异常时执行,是可选的。 3. **示例代码**:通过具体例子展示了如何捕获不同类型的异常(如`ValueError`和`ZeroDivisionError`),并解释了异常处理
35 24
|
7天前
|
人工智能 Shell 开发工具
[oeasy]python065python报错怎么办_try_试着来_except_发现异常
本文介绍了Python中处理异常的基本方法,重点讲解了`try`和`except`的用法。通过一个计算苹果重量的小程序示例,展示了如何捕获用户输入错误并进行处理。主要内容包括: 1. **回顾上次内容**:简要回顾了Shell环境、Python3游乐场和Vim编辑器的使用。 2. **编写程序**:编写了一个简单的程序来计算苹果的总重量,但发现由于输入类型问题导致结果错误。 3. **调试与修正**:通过调试发现输入函数返回的是字符串类型,需要将其转换为整数类型才能正确计算。
48 32
|
28天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
106 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
1月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
73 20
|
2月前
|
XML JSON 数据库
Python的标准库
Python的标准库
185 77
|
2月前
|
XML JSON 数据库
Python的标准库
Python的标准库
71 11
|
2月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
105 8
|
2月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
88 4
|
3月前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
226 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型

热门文章

最新文章

推荐镜像

更多