箱线图的几种画法-Python

欢迎关注笔者的微信公众号


箱线图是一种强大的数据可视化工具,用于了解数据的分布。它将数据分成四分位数,并根据从这些四分位数得出的五个数字对其进行汇总:

  • 中位数:数据的中间值。标记为 Q2,描绘了第 50 个百分点。

  • 第一个四分位数:“最小非异常值”和中位数之间的中间值。标记为 Q1,描绘了第 25 个百分点。

  • 第三四分位数:“最大非异常值”和中位数之间的中间值。标记为 Q3,描绘了第 75 个百分点。

  • “最大非异常值”:按 (Q3 + 1.5*IQR) 计算。高于此值的所有值都被视为异常值。

  • “最小非异常值”:按 (Q1 – 1.5*IQR) 计算。低于此值的所有值都被视为异常值。

它还可以表示数据的对称性、偏度和分布。

箱型图的功能:

  • 直观明了地识别数据批中的异常值
  • 利用箱线图判断数据批的偏态和尾重
  • 比较几批数据的形状

使用Pandas + Seaborn绘制箱型图

  • 导入相关库
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import seaborn as snsimport warnings
warnings.filterwarnings("ignore")sns.set(font="SimHei")
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

Pandas绘图

# load the dataset
df = sns.load_dataset('tips')
df.head(10)

tips是Seaborn官方的一个数据集,首次会从github远程仓库下载到用户目录,如果出现超时可手动使用下面的镜像加速网址下载官方数据集并放到用户目录下,如/home/sairo/seaborn-data

https://github.com.cnpmjs.org/mwaskom/seaborn-data.git

df.boxplot(by="day", column=["total_bill"])
df.boxplot(by="size", column=["tip"], grid=False)

使用Seaborn画箱型图

tips = sns.load_dataset("tips")
tips.head()

# Draw a vertical boxplot grouped
# by a categorical variable:
sns.set_style("whitegrid")sns.boxplot(x="day", y="total_bill", data=tips)

Seaborn绘制水平箱型图

箱线图用于可视化数据分布,这在需要比较数据时非常有用。有时,箱线图也称为箱线图。该框显示了数据集的四分位数,而胡须延伸以显示分布的其余部分。在本文中,我们将使用 python 使用 seaborn 实现水平箱线图。

水平箱线图

Seaborn 使用 boxplot() 方法绘制箱线图。我们可以通过两种方法将箱线图变成水平箱线图,我们需要切换x和y属性并将其传递给boxplot()方法,另一种是使用orient="h"选项传递给boxplot() 方法。

  • 方法一:切换x和y属性
# import library & dataset
import seaborn as snsdf = sns.load_dataset("iris")# Just switch x and y
plt.Figure(dpi=300)
sns.boxplot(y=df["species"], x=df["sepal_length"])

  • 方法 2:使用 orient = h
# import library & dataset
import seaborn as snstips = sns.load_dataset("tips")
ax = sns.boxplot(data=tips, orient="h", palette="Set2")

Seaborn – 使用调色板为箱线图着色

为您的数据可视化添加正确的颜色集使其更令人印象深刻和可读,seaborn 调色板使您可以轻松地在您的可视化中使用颜色。在本文中,我们将看到如何使用 seaborn 调色板为箱线图着色,还将了解 seaborn 调色板的用途,它也可以应用于其他绘图。

# import libraries
import matplotlib.pyplot as plt
import seaborn as snsds = sns.load_dataset("iris")
ax = sns.boxplot(data=tips, orient="h")

Seaborn boxplot() 函数有调色板参数,在这个例子中我们设置了palette=”Set1″,它使用定性调色板来给boxplot中的框上色。所以在 boxplot 方法中添加调色板参数。

# use palette method
ax = sns.boxplot(data=ds, orient="h", palette="Set1")

如何在 Python 中使用 Seaborn 在 Boxplot 上显示均值?

本节使用官方提供的泰坦尼克数据集

# importing useful libraries
import matplotlib.pyplot as plt
import seaborn as sns# using titanic dataset from
# seaborn library
df = sns.load_dataset("titanic")# to see first 5 rows of dataset
df.head()

# to plot a boxplot of
# age vs survived feature
plt.figure(figsize=(10, 8))
sns.boxplot(x="survived", y="age", data=df)
plt.ylabel("Age", size=14)
plt.xlabel("Survived", size=14)
plt.title("Titanic Dataset", size=18)

我们观察到中位数显示为四分位线,但未显示平均值。

  • 为了显示均值,我们在 boxplot 函数中使用了一个额外的关键字参数。我们将 showmeans 设置为 True。
# boxplot with showmeans
plt.figure(figsize=(10, 8))
sns.boxplot(x="survived", y="age", data=df, showmeans=True)  # notice the change
plt.ylabel("Age", size=14)
plt.xlabel("Survived", size=14)
plt.title("Titanic Dataset", size=18)

  • 要设置我们自定义的标记和标记颜色,我们将使用meanprops关键字参数,如下面的代码所示。
# customizing using meanprops
plt.figure(figsize=(10, 8))
sns.boxplot(x="survived",y="age",data=df,showmeans=True,meanprops={"marker": "+", "markeredgecolor": "black", "markersize": "10"},
)
plt.ylabel("Age", size=14)
plt.xlabel("Survived", size=14)
plt.title("Titanic Dataset", size=18)

如何在 Seaborn 中手动排序 Boxplot?

# import required modules
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns# load dataset
tips = sns.load_dataset("tips")# display top most rows
tips.head()# illustrate box plot
fx = sns.boxplot(x="day", y="total_bill", data=tips, hue="sex", palette="Set2")

  • 使用 seaborn 绘制箱线图。看上图的顺序和根据我们的需要设置顺序后的区别。 Palette 将改变图形的颜色(您也可以尝试 Set1 和 Set3)
# illustrating box plot with order
fx = sns.boxplot(x="day",y="total_bill",data=tips,order=["Sun", "Sat", "Fri", "Thur"],hue="sex",palette="Set2",
)

使用 Seaborn 在 Python 中分组箱线图

分组箱线图用于可视化具有多个子组的数据。此外,我们可以使用分组箱线图一次可视化三个变量,其中一个变量是数字变量,另外两个变量是分类变量。 我们将使用 Python 的 Seaborn 库来创建分组箱线图。我们将使用来自 Seaborn 库的tip数据集。

# import seaborn library
import seaborn as sns# load the dataset
data = sns.load_dataset("tips")data.head(5)

示例 1:让我们创建一个箱线图来了解“tips”数据集的每一“天”上“total_bill”的分布。但我们也想根据“性别”属性对其进行分组。因此,我们将为这三个属性绘制分组箱线图,其中“sex”和“day”是分类属性,“total_bill”是数值属性。

sns.boxplot(x=data["day"], y=data["total_bill"], hue=data["sex"])

示例 2:下一个示例与上一个示例类似。唯一的区别是作为"smoker"属性的"hue"参数的值。在这里,我们想根据一个人是否吸烟来了解"total_bill"与"day"组的分布。

# create another grouped boxplot
sns.boxplot(x=data["day"], y=data["total_bill"], hue=data["smoker"], palette="Set2")

示例 3:在本示例中,我们将介绍如何绘制 2 个以上的分组箱线图。如果"hue"参数的值有 2 个以上的类别,那么我们可以绘制 2 个以上的分组箱线图,如下所示。 在这里,‘hue’ = data[‘size’] 有六个类别,因此我们可以使用与上述相同的方法看到 2 个以上的分组箱线图。

sns.boxplot(x=data["day"], y=data["total_bill"], hue=data["size"], palette="husl")

使用 graph_objects 类在 Plotly 中绘制箱线图

Plotly 是一个 Python 库,用于设计图形,尤其是交互式图形。它可以绘制各种图形和图表,如直方图、条形图、箱线图、展开图等等。它主要用于数据分析以及财务分析。

使用graph_objects类的箱线图

import plotly.graph_objects as go
import numpy as np# creating random data through randomint
# function of numpy.random
np.random.seed(42)random_y1= np.random.randint(1,101,100)
random_y2= np.random.randint(1,101,100)x = ['A', 'B', 'C', 'D']fig = go.Figure()fig.add_trace(go.Box(y=random_y1))
fig.add_trace(go.Box(y=random_y2))fig.show()

水平箱线图

水平箱线图是一种箱线图,其中 x 变量和 y 值在图中水平显示。它可以通过传递箱线图的 x 参数来创建。

import plotly.graph_objects as go
import numpy as np# creating random data through randomint
# function of numpy.random
np.random.seed(42)random_x1= np.random.randint(1,101,100)
random_x2= np.random.randint(1,101,100)x = ['A', 'B', 'C', 'D']fig = go.Figure()fig.add_trace(go.Box(x=random_x1))
fig.add_trace(go.Box(x=random_x2))fig.show()

寻找均值和标准差

可以使用 boxmean 参数找到由boxplot绘制的数据的平均值和标准偏差。它可以取两个值:

True: 显示均值

sd: 为标准差。

import plotly.graph_objects as go
import numpy as np# creating random data through randomint
# function of numpy.random
np.random.seed(42)random_x1= np.random.randint(1,101,100)
random_x2= np.random.randint(1,101,100)x = ['A', 'B', 'C', 'D']fig = go.Figure()fig.add_trace(go.Box(x=random_x1, marker_color = 'indianred', boxmean=True))
fig.add_trace(go.Box(x=random_x2, marker_color='royalblue', boxmean='sd'))fig.show()

更改四分位数的算法

选择四分位数的算法也可以在plotly中选择。默认使用线性算法计算。然而,它提供了两种以上的算法来做同样的事情,即包容性和排斥性。可以通过传递 quartilemethod 参数来完成。

import plotly.graph_objects as go
import numpy as np# creating random data through randomint
# function of numpy.random
np.random.seed(42)random_y= np.random.randint(1,101,100)x = ['A', 'B', 'C', 'D']fig = go.Figure()fig.add_trace(go.Box(y=random_y, quartilemethod="linear", name="linear"))
fig.add_trace(go.Box(y=random_y, quartilemethod="inclusive", name="inclusive"))
fig.add_trace(go.Box(y=random_y, quartilemethod="exclusive", name="exclusive"))fig.show()

显示基础数据

可以使用 boxpoints 参数显示基础数据。这个参数的值可以是三种类型——

all为所有点

outliers 仅异常值

false 不是以上任何一种

import plotly.graph_objects as go
import numpy as np# creating random data through randomint
# function of numpy.random
np.random.seed(42)random_y1= np.random.randint(1,101,100)
random_y2= np.random.randint(1,101,100)x = ['A', 'B', 'C', 'D']fig = go.Figure()fig.add_trace(go.Box(y=random_y1, boxpoints="all"))
fig.add_trace(go.Box(y=random_y2, boxpoints="outliers"))fig.show()

参考文献

  • https://www.geeksforgeeks.org/horizontal-boxplots-with-seaborn-in-python/?ref=lbp

箱线图的几种画法-Python相关推荐

  1. 画箱线图_箱线图的N种画法

    图中标示了箱线图中每条线和点表示的含义,其中应用到了分位数的概念 线的主要包含五个数据节点,将一组数据从大到小排列,分别计算出他的上边缘(Maximum),上四分位数(Q3),中位数(Median), ...

  2. 数据清洗python实现箱线图_GitHub - nonefirst/data_analysis: 基于Python的南京二手房数据采集及可视化分析...

    基于Python的南京二手房数据采集及可视化分析 1 内容简介 首先通过爬虫采集链家网上所有南京二手房的房源数据,并对采集到的数据进行清洗:然后,对清洗后的数据进行可视化分析,探索隐藏在大量数据背后的 ...

  3. 用python画小花_如何用python制作箱线图

    hi,我小花花又来了 箱线图,一种被广泛应用在数据可视化上的图表,它可以用来反映一组或多组连续型定量数据分布的中心位置和散布范围,因形状如箱子而得名.它最大的优点是可以不受异常值的影响,能够准确稳定地 ...

  4. python数据可视化入门(六):棉棒图,箱线图,误差棒图

    棉棒图 函数:plt.stem(x,y, linefmt=None, markerfmt=None, basefmt=None) 主要参数: x: 棉棒的x轴基线的取值范围 y: 棉棒的长度 line ...

  5. python3__绘图__常用数据分析图形(热力图,雷达图,箱线图,平行坐标,3D图,混淆矩阵,饼状图)

    1.matplotlib.pyplot简介 matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似.每一个pyplot函数都使一副图像做出些许改变,例如创建一幅图, ...

  6. 箱线图怎么判断异常值_极简统计学---箱线图[2]

    全文大概1400字,阅读全文大概需要4.5分钟. 上一篇讲了箱线图基本组成,其中涉及到: 5大要数: 最大值,最小值,第一四分位数(Q1),第二四分位数(中位数Median),第三四分位数(Q3) , ...

  7. pythonmatplotlib绘图小提琴_python 箱线图和小提琴图

    箱形图(Box-plot) 又称为盒须图.盒式图或箱线图 是一种用作显示一组数据分散情况资料的统计图,因形状如箱子而得名.它能显示出一组数据的最大值.最小值.中位数.及上下四分位数. 箱形图绘制须使用 ...

  8. matlab输出箱线图的五个特征值_Matlab绘制箱线图

    箱线图,又称作箱须图(box-whisker plot)是利用数据中的五个特征值--最小值.第一四分位点.中值.第三四分位点.最大值来描述数据的图形.箱线图可以粗略的估计数据是否具有对称性,粗略观察数 ...

  9. R 多变量数据预处理_R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)...

    作者:穆晨 来源:https://www.cnblogs.com/muchen/p/5310732.html 阅读目录 数据分布图简介 绘制基本直方图 基于分组的直方图 绘制密度曲线 绘制基本箱线图 ...

最新文章

  1. c# ini file
  2. 单片机外围模块漫谈之二,如何提高ADC转换精度
  3. java实验七实验报告_Java实验报告-7-风扇
  4. Ubuntu 16.04安装vsftpd 并开启ftp服务
  5. python中format函数用法简书_Python format 格式化函数
  6. 用L2TP与OpenSwan构建IPSec ×××(使用X.509证书认证)
  7. 2022数学建模“五一杯”B题
  8. Python 之 pip安装 及 使用详解
  9. 2008 r2 server sql 中文版补丁_Microsoft SQL Server 2008 R2 SP3补丁 32位 官方免费版
  10. 快速从入门到精通!黑马java课程大纲
  11. (已解决)Latex如何插入超链接
  12. 机器学习常用衡量标准
  13. 【SAP ABAP学习资料】(财务相关)BTE增强查找,新增
  14. 用严密的数学语言证明:周长相同时,圆面积最大
  15. 基于CIFAR100的VGG网络结构详解
  16. python 重定向 ctf_CTF web题型解题技巧 第四课 web总结
  17. asp.net zero 8.2 学习-12- abp 文件上传、获取、删除
  18. 华师大 OJ 2897
  19. webix.tree 修改图标
  20. 华为服务器上传文件,服务器上传文件的方式

热门文章

  1. 1000元一根的Type C数据线
  2. JS之如何判断数据类型
  3. stata在进行meta分析时出现command metabias is unrecognized,如何解决?
  4. 独立开发变现周刊(第66期): 如何把一个短链接生成工具变成一个可持续盈利的产品?...
  5. 微信退款服务器系统失败怎么办,微信缴费失败怎么退款?能退回吗?
  6. SaaS订阅收费模式的精髓是:预充值
  7. # 编译 qemu,libvirt, qemu rpm 包和 libvirt rpm 包
  8. 有五个人坐在一起,问第五个人多少岁,他说比第四个人大2岁。问第四个人多少岁,他说比第三个人大两岁 python
  9. 你这简历一看就是包装过的
  10. 四川翌加:抖音小店的发货时间是多长