您是否想过,如何在 Python 中更好地呈现数值数据的分布?答案之一就是学会使用箱线图!箱线图非常适合可视化多个分组之间的分布对比。
在本教程中,我们将介绍什么是箱线图、在 Python 中创建它们的不同方式,以及一些常见的新手错误。
什么是 Python 箱线图?
箱线图(box-and-whisker plot)是一种基于五数概括(最小值、第一四分位数 Q1、中位数、第三四分位数 Q3、最大值)的标准数据展示方式 。
箱线图尤其有助于识别离群值,并理解数据的离散程度与偏态。它既可用于比较多个分组,也可用于展示单个变量的分布。
箱线图的组成
一个典型的箱线图由以下几个部分构成:
中位数 :数据的中间值,以箱体中的一条线表示。
箱体 :表示数据的四分位距(IQR),即 Q1 和 Q3 之间的范围。箱体的下边缘和上边缘分别代表 Q1 和 Q3。
须 :从箱体两端延伸的垂直线,表示不含离群值的最小值和最大值。
离群值 :位于须之外、相较于其他数据显得异常的点。
端帽 :须末端的水平线,表示最小值和最大值,包括任何离群值。
这些组成部分共同赋予箱线图统计含义,并便于对不同数据组进行直观比较。
Python 是一个强大的工具,可以帮助我们创建箱线图。接下来我们将回顾几种实现方法。
Python 箱线图:分步指南
在了解了箱线图的基础概念后,让我们看看如何使用 Python 创建它们。Python 中有多种库支持绘制箱线图,如 Matplotlib、Seaborn 和 Plotly。
1. 安装必要的库
要在 Python 中创建箱线图,首先需要安装必要的库。主要用到的库是 Matplotlib 、Seaborn 和 Plotly 。
安装命令如下:
pip install matplotlib
pip install seaborn
pip install plotly== 5.22 .0 技术支持
2. 导入库并加载数据
安装完成后,下一步是在您的 Python 环境中导入这些库。
同时,确保加载将用于绘制箱线图的必要数据集(如有)。
import matplotlib. pyplot as plt
import seaborn as sns
import plotly. express as px技术支持
3. 使用 Matplotlib 创建箱线图
得益于 Python 的灵活性,创建一个简单的箱线图只需极少代码。让我们从最常用的 Matplotlib 库开始。
1. 单个 Matplotlib 箱线图
要使用 Matplotlib 创建箱线图,先导入所需库:
import matplotlib. pyplot as plt
import numpy as np技术支持
接着,准备一个简单的数据集:
np. random. seed( 10 )
data = np. random. normal( 0 , 1 , 100 ) 技术支持
最后,创建箱线图并显示:
plt. boxplot( data) plt. title( 'Basic Boxplot' ) plt. show( ) 技术支持
结果如下:
2. 多个 Matplotlib 箱线图
如果您想在不同的子图中分别创建箱线图,可以使用 subplot 函数。这可以在一张图像中并排显示多个箱线图。
完整代码示例如下:
import matplotlib. pyplot as plt
import numpy as np
data1 = np. random. normal( 0 , 1 , 100 )
data2 = np. random. normal( 1 , 2 , 100 )
data3 = np. random. normal( 2 , 1.5 , 100 )
fig, axs = plt. subplots( 1 , 3 , figsize= ( 15 , 5 ) )
axs[ 0 ] . boxplot( data1)
axs[ 0 ] . set_title( 'Data 1' )
axs[ 0 ] . set_xlabel( 'Sample' )
axs[ 0 ] . set_ylabel( 'Value' )
axs[ 1 ] . boxplot( data2)
axs[ 1 ] . set_title( 'Data 2' )
axs[ 1 ] . set_xlabel( 'Sample' )
axs[ 1 ] . set_ylabel( 'Value' )
axs[ 2 ] . boxplot( data3)
axs[ 2 ] . set_title( 'Data 3' )
axs[ 2 ] . set_xlabel( 'Sample' )
axs[ 2 ] . set_ylabel( 'Value' )
plt. tight_layout( )
plt. show( ) 技术支持
得到的图如下:
不过,这些子图并不共享同一坐标轴,不适合在类别之间做并排对比。若要在同一坐标轴上绘制多个箱线图,您需要创建分组箱线图。
分组箱线图特别适用于比较多个类别的分布,可帮助更细致地理解数据。这些比较能揭示其他图表不易察觉的差异。
每个组都会在同一图中并排呈现,便于突出不同子类别间的差异、趋势和离群值。
如下所示可以创建分组子图:
data_group1 = [ np. random. normal( 0 , 1 , 100 ) , np. random. normal( 1 , 2 , 100 ) , np. random. normal( 2 , 1.5 , 100 ) ]
data_group2 = [ np. random. normal( 0 , 1 , 100 ) , np. random. normal( 1 , 2 , 100 ) , np. random. normal( 2 , 1.5 , 100 ) ]
data = data_group1 + data_group2
plt. boxplot( data, positions= [ 1 , 2 , 3 , 5 , 6 , 7 ] , labels= [ 'G1-D1' , 'G1-D2' , 'G1-D3' , 'G2-D1' , 'G2-D2' , 'G2-D3' ] )
plt. title( 'Grouped Boxplots' )
plt. xlabel( 'Group-Dataset' )
plt. ylabel( 'Value' )
plt. show( ) 技术支持
上述代码将生成如下分组箱线图:
4. 自定义 Matplotlib 箱线图
您可以在 Matplotlib 中进行高级自定义,以提升数据可视化效果。
例如添加均值和标准差、创建分组箱线图、使用水平箱线图等技巧,都能更好地洞察数据分布。
在 Python 中自定义箱线图,还能让图形更契合项目需求。
以下是使用 Matplotlib 自定义箱线图的一些方法:
1. 添加标签和标题
标题和标签能让您的图表更易于理解,观众可以快速看出数据对比。添加方式很直接,可使用 Matplotlib 的相关函数完成。
为 Matplotlib 箱线图添加标签:
plt. boxplot( data)
plt. title( 'Customized Boxplot Title' )
plt. xlabel( 'Customized X Label' )
plt. ylabel( 'Customized Y Label' )
plt. show( ) 技术支持
这将创建一个带有标签的箱线图,如下图所示:
2. 调整箱线图颜色
在 Python 中自定义箱线图的颜色和样式,可使数据呈现更美观清晰,也有助于向相关方突出特定数据点或对比。
您可以通过 boxprops、whiskerprops、capprops、medianprops 和 flierprops 参数分别更改箱体、须、端帽、中位数和离群点的颜色。
示例代码如下:
plt. boxplot( data, boxprops= dict ( color= 'blue' ) , whiskerprops= dict ( color= 'red' ) , capprops= dict ( color= 'green' ) , medianprops= dict ( color= 'orange' ) , flierprops= dict ( markerfacecolor= 'red' , marker= 'o' ) )
plt. show( ) 技术支持
这将根据您设置的参数,为箱线图的各组件应用不同颜色:
3. 添加均值与标准差
在箱线图中加入均值和标准差,可提供更多统计信息。
data1 = np. random. normal( 0 , 1 , 100 )
data2 = np. random. normal( 1 , 2 , 100 )
data3 = np. random. normal( 2 , 1.5 , 100 )
mean = [ np. mean( d) for d in data]
std_devs = [ np. std( d) for d in data]
plt. boxplot( data, labels= [ 'Data 1' , 'Data 2' , 'Data 3' ] )
for i in range ( len ( mean) ) :
plt. plot( i + 1 , mean[ i] , 'ro' )
for i in range ( len ( std_devs) ) :
plt. errorbar( i + 1 , mean[ i] , yerr= std_devs[ i] , fmt= 'o' , color= 'red' )
plt. title( 'Boxplot with Means and Standard Deviations' )
plt. xlabel( 'Dataset' )
plt. ylabel( 'Value' )
plt. show( ) 技术支持
结果如下:
4. 水平箱线图
在类别名称较长时,水平箱线图往往更易阅读。
在 Matplotlib 中,只需在 boxplot 函数中设置 vert 参数即可实现。
plt. boxplot( data,
labels= [ 'Data 1' , 'Data 2' , 'Data 3' ] ,
vert= False )
plt. title( 'Horizontal Boxplot' )
plt. xlabel( 'Value' )
plt. ylabel( 'Dataset' )
plt. show( ) 技术支持
运行上述代码将得到如下图:
我们的 Matplotlib 数据可视化入门 课程也能帮助您掌握除箱线图之外的更多可视化方法。
如果您希望日后随时查阅,此处提供一份 Matplotlib 绘图速查表 :
5. 使用 Seaborn 创建箱线图
Seaborn 基于 Matplotlib 构建,能以极少代码轻松创建美观的箱线图。其语法简洁,适合各个水平的用户,并且可与其他库集成,最大化数据分析的灵活性。
1. 基本 Seaborn 箱线图
下面分步演示如何用 Seaborn 创建一个基本箱线图。与之前一样,先导入必要的库。
import seaborn as sns
import matplotlib. pyplot as plt
import numpy as np技术支持
接着,准备一个简单的数据集:
np. random. seed( 10 )
data = np. random. normal( 0 , 1 , 100 ) 技术支持
最后,创建箱线图并显示:
sns. boxplot( data= data)
plt. title( 'Basic Boxplot' )
plt. show( ) 技术支持
结果如下:
2. 高级 Seaborn 自定义
您可以通过 hue、orient 和 palette 参数自定义 Seaborn 图形。
让我们看看如何根据类别为箱线图添加颜色,使用 hue 参数:
data = {
'Group' : [ 'A' ] * 100 + [ 'B' ] * 100 + [ 'C' ] * 100 ,
'Value' : np. concatenate( [ np. random. normal( 0 , 1 , 100 ) ,
np. random. normal( 1 , 2 , 100 ) ,
np. random. normal( 2 , 1.5 , 100 ) ] )
}
df = pd. DataFrame( data)
df[ 'Subgroup' ] = np. random. choice( [ 'X' , 'Y' ] , size= 300 )
sns. boxplot( x= 'Group' , y= 'Value' , data= df, hue= 'Subgroup' , palette= 'Set2' )
plt. title( 'Colored Boxplot' )
plt. show( ) 技术支持
修改后的箱线图如下:
若要让箱线图按特定方向排列,请使用 orient 参数。垂直方向设为 'v',水平方向设为 'h'。
以下为水平箱线图的代码:
sns. boxplot( data= df, orient= 'h' , palette= 'Set2' )
plt. title( 'Colored Boxplot' )
plt. show( ) 技术支持
上述代码将生成如下图:
要在箱线图上叠加单个数据点,可以使用 swarmplot 绘制蜂群图:
sns. boxplot( x= 'Group' , y= 'Value' , data= df)
sns. swarmplot( x= 'Group' , y= 'Value' , data= df, color= 'black' , alpha= 0.5 )
plt. title( 'Boxplot with Swarmplot' )
plt. show( ) 技术支持
上述代码将生成如下图:
这样的蜂群图有助于进一步揭示数据分布情况,与箱线图的统计信息相辅相成,为观众提供更全面的视角。
想了解更多在 Seaborn 中实现数据可视化的方法,请查看我们的Seaborn 数据可视化入门 课程。
如果您希望日后随时查阅,此处提供一份 Seaborn 绘图速查表 :
解读 Python 箱线图结果
如何解读箱线图,取决于具体情境和所要回答的研究问题。
不过,一些通用原则可以帮助您理解箱线图所展示的数据分布,包括:
中位数线表示数据集的中间值。
四分位距(IQR)或中间 50% 的取值位于第一四分位数(Q1)与第三四分位数(Q3)之间。
须分别向上超出 Q3、向下低于 Q1 1.5 倍 IQR 的范围。
离群值通常以点或星号单独绘出。
箱体与须的长度反映数据的离散程度。
偏态分布会在箱体相对于中位数线的大小与位置上表现出不对称。
超出 Q3 以上或 Q1 以下 1.5 倍 IQR 的离群值,可能表示极端取值或数据测量中的潜在错误。
创建 Python 箱线图时常见的错误
尽管 Python 能让您基于数据集轻松创建美观的箱线图,但仍需注意一些方面,以避免产生误导或不正确的可视化。
1. 未处理缺失值
在创建箱线图时,实践者常忽视数据预处理的重要性,从而导致误导性结果。
所有数据可视化在绘图前都需要一定的清洗。箱线图也不例外,缺失值可能被显示为离群值,从而影响结果。
2. 数据缩放不当
此外,用户有时未对数据进行合适的缩放,导致箱线图出现偏差,无法真实反映数据集的特征。缩放处理可确保各特征在分析中贡献均衡。
3. 未处理离群值
最后,分析人员可能忽视在绘图前充分检查并处理离群值。对离群值处理不当会影响解读,因此要区分真正的离群值与数据采集中出现的错误或异常。
在构建数据可视化时,不妨参考这份速查表 :
总结
箱线图是可视化数据分布并在不同类别之间进行比较的有力工具。
在 Python 中,您可以使用 Matplotlib、Seaborn 或 Plotly 快速创建箱线图,且无需过多编码。DataCamp 为这些工具都提供了系统课程:
想进一步探索如何用 Python 进行数据可视化?可以查看 Python 数据可视化技能路径 !
您是否想过,如何在 Python 中更好地呈现数值数据的分布?答案之一就是学会使用箱线图!箱线图非常适合可视化多个分组之间的分布对比。
在本教程中,我们将介绍什么是箱线图、在 Python 中创建它们的不同方式,以及一些常见的新手错误。
什么是 Python 箱线图?
箱线图(box-and-whisker plot)是一种基于五数概括(最小值、第一四分位数 Q1、中位数、第三四分位数 Q3、最大值)的标准数据展示方式。
箱线图尤其有助于识别离群值,并理解数据的离散程度与偏态。它既可用于比较多个分组,也可用于展示单个变量的分布。
箱线图的组成
一个典型的箱线图由以下几个部分构成:
这些组成部分共同赋予箱线图统计含义,并便于对不同数据组进行直观比较。
Python 是一个强大的工具,可以帮助我们创建箱线图。接下来我们将回顾几种实现方法。
Python 箱线图:分步指南
在了解了箱线图的基础概念后,让我们看看如何使用 Python 创建它们。Python 中有多种库支持绘制箱线图,如 Matplotlib、Seaborn 和 Plotly。
1. 安装必要的库
要在 Python 中创建箱线图,首先需要安装必要的库。主要用到的库是 Matplotlib、Seaborn 和 Plotly。
安装命令如下:
2. 导入库并加载数据
安装完成后,下一步是在您的 Python 环境中导入这些库。
同时,确保加载将用于绘制箱线图的必要数据集(如有)。
3. 使用 Matplotlib 创建箱线图
得益于 Python 的灵活性,创建一个简单的箱线图只需极少代码。让我们从最常用的 Matplotlib 库开始。
1. 单个 Matplotlib 箱线图
要使用 Matplotlib 创建箱线图,先导入所需库:
接着,准备一个简单的数据集:
最后,创建箱线图并显示:
结果如下:
2. 多个 Matplotlib 箱线图
如果您想在不同的子图中分别创建箱线图,可以使用
subplot函数。这可以在一张图像中并排显示多个箱线图。完整代码示例如下:
得到的图如下:
不过,这些子图并不共享同一坐标轴,不适合在类别之间做并排对比。若要在同一坐标轴上绘制多个箱线图,您需要创建分组箱线图。
分组箱线图特别适用于比较多个类别的分布,可帮助更细致地理解数据。这些比较能揭示其他图表不易察觉的差异。
每个组都会在同一图中并排呈现,便于突出不同子类别间的差异、趋势和离群值。
如下所示可以创建分组子图:
上述代码将生成如下分组箱线图:
4. 自定义 Matplotlib 箱线图
您可以在 Matplotlib 中进行高级自定义,以提升数据可视化效果。
例如添加均值和标准差、创建分组箱线图、使用水平箱线图等技巧,都能更好地洞察数据分布。
在 Python 中自定义箱线图,还能让图形更契合项目需求。
以下是使用 Matplotlib 自定义箱线图的一些方法:
1. 添加标签和标题
标题和标签能让您的图表更易于理解,观众可以快速看出数据对比。添加方式很直接,可使用 Matplotlib 的相关函数完成。
为 Matplotlib 箱线图添加标签:
这将创建一个带有标签的箱线图,如下图所示:
2. 调整箱线图颜色
在 Python 中自定义箱线图的颜色和样式,可使数据呈现更美观清晰,也有助于向相关方突出特定数据点或对比。
您可以通过
boxprops、whiskerprops、capprops、medianprops和flierprops参数分别更改箱体、须、端帽、中位数和离群点的颜色。示例代码如下:
这将根据您设置的参数,为箱线图的各组件应用不同颜色:
3. 添加均值与标准差
在箱线图中加入均值和标准差,可提供更多统计信息。
结果如下:
4. 水平箱线图
在类别名称较长时,水平箱线图往往更易阅读。
在 Matplotlib 中,只需在 boxplot 函数中设置 vert 参数即可实现。
运行上述代码将得到如下图:
我们的 Matplotlib 数据可视化入门课程也能帮助您掌握除箱线图之外的更多可视化方法。
如果您希望日后随时查阅,此处提供一份 Matplotlib 绘图速查表:
5. 使用 Seaborn 创建箱线图
Seaborn 基于 Matplotlib 构建,能以极少代码轻松创建美观的箱线图。其语法简洁,适合各个水平的用户,并且可与其他库集成,最大化数据分析的灵活性。
1. 基本 Seaborn 箱线图
下面分步演示如何用 Seaborn 创建一个基本箱线图。与之前一样,先导入必要的库。
接着,准备一个简单的数据集:
最后,创建箱线图并显示:
结果如下:
2. 高级 Seaborn 自定义
您可以通过
hue、orient和palette参数自定义 Seaborn 图形。让我们看看如何根据类别为箱线图添加颜色,使用
hue参数:修改后的箱线图如下:
若要让箱线图按特定方向排列,请使用
orient参数。垂直方向设为 'v',水平方向设为 'h'。以下为水平箱线图的代码:
上述代码将生成如下图:
要在箱线图上叠加单个数据点,可以使用
swarmplot绘制蜂群图:上述代码将生成如下图:
这样的蜂群图有助于进一步揭示数据分布情况,与箱线图的统计信息相辅相成,为观众提供更全面的视角。
想了解更多在 Seaborn 中实现数据可视化的方法,请查看我们的Seaborn 数据可视化入门课程。
如果您希望日后随时查阅,此处提供一份 Seaborn 绘图速查表:
解读 Python 箱线图结果
如何解读箱线图,取决于具体情境和所要回答的研究问题。
不过,一些通用原则可以帮助您理解箱线图所展示的数据分布,包括:
创建 Python 箱线图时常见的错误
尽管 Python 能让您基于数据集轻松创建美观的箱线图,但仍需注意一些方面,以避免产生误导或不正确的可视化。
1. 未处理缺失值
在创建箱线图时,实践者常忽视数据预处理的重要性,从而导致误导性结果。
所有数据可视化在绘图前都需要一定的清洗。箱线图也不例外,缺失值可能被显示为离群值,从而影响结果。
2. 数据缩放不当
此外,用户有时未对数据进行合适的缩放,导致箱线图出现偏差,无法真实反映数据集的特征。缩放处理可确保各特征在分析中贡献均衡。
3. 未处理离群值
最后,分析人员可能忽视在绘图前充分检查并处理离群值。对离群值处理不当会影响解读,因此要区分真正的离群值与数据采集中出现的错误或异常。
在构建数据可视化时,不妨参考这份速查表:
总结
箱线图是可视化数据分布并在不同类别之间进行比较的有力工具。
在 Python 中,您可以使用 Matplotlib、Seaborn 或 Plotly 快速创建箱线图,且无需过多编码。DataCamp 为这些工具都提供了系统课程:
想进一步探索如何用 Python 进行数据可视化?可以查看 Python 数据可视化技能路径!