Boxplot

本文通过使用Python的matplotlib和seaborn库,详细展示了如何创建和自定义箱形图,以及如何处理和可视化分类数据。从基本的箱形图绘制到高级的自定义颜色设置,再到利用FacetGrids进行复杂的数据展示,本文提供了丰富的实例和代码片段。

In [123]: import numpy as np

               import matplotlib.pyplot as plt

In [124]: data = np.random.randn(100)

In [125]: plt.boxplot(data) #The red bar is the median of the distribution.

               plt.show()

https://i-blog.csdnimg.cn/blog_migrate/1014b0fd34b81f9923a4dd6a8a350a85.png

In [126]: import numpy as np

               import matplotlib.pyplot as plt

In [127]: data = np.random.randn(100,5)

In [128]: plt.boxplot(data)

               plt.show()

https://i-blog.csdnimg.cn/blog_migrate/72d160e7024716214b260d871ec3bd76.png

5 Using custom colors for boxplots

In [38]: import numpy as np

             import matplotlib.pyplot as plt

In [47]: values = np.random.randn(100)

             b = plt.boxplot(values)      #Plotting functions returns a dictionary

             #The key of the dictionary is the name of the graphical elements.

            #such elements will be medians, fliers, whiskers, boxes, and caps.

 #we iterate every graphic primitive that is a part of the boxplot and set its color to black.

            for name, line_list in b.items():                   #b={name:key}

                   for line in line_list:

                          line.set_color('k') #Making a boxplot appear totally black

            plt.show()

Facet Grids分面网格 and Categorical Data类型数据

import seaborn as sns

import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

tips = pd.read_csv('../examples/tips.csv')

tips.head()

tips['tip_pct'] = tips['tip'] / (tips['total_bill'] - tips['tip'])

tips.head()

                                         #categorical data                        

sns.factorplot(x='day', y='tip_pct', hue='time', col='smoker', kind='bar', data=tips[tips.tip_pct <1])

 

plt.show()

                                         #categorical data                        

sns.factorplot(x='day', y='tip_pct', row='time', col='smoker', kind='bar', data=tips[tips.tip_pct <1])

 

plt.show()

 

sns.factorplot(x='tip_pct', y='day', kind='box', data=tips[tips.tip_pct<0.5])

plt.show()

<think>我们讨论的是箱线图(Boxplot)的参数详解。箱线图是一种用于显示数据分布情况的统计图,特别是在显示数据的分散情况、异常值等方面非常有用。 通常,箱线图由五个数值点构成:最小值、第一四分位数(Q1)、中位数(Q2)、第三四分位数(Q3)和最大值。此外,箱线图还可以显示异常值(outliers)。 在不同的编程语言和库中,绘制箱线图的函数可能有所不同。这里以Python的matplotlib库和seaborn库为例,因为它们是Python中常用的绘图库。 我们将详细解释matplotlib.pyplot.boxplot()函数中的参数。然后,也会简要介绍seaborn.boxplot()的参数,因为seaborn是基于matplotlib的,并且提供了更高级的接口。 首先,我们来看matplotlib的boxplot函数: 函数签名: matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, capwidths=None, *, data=None) 参数众多,但常用的参数如下: 1. `x`:输入数据。可以是数组或数组的序列(每个数组对应一个箱线图)。 2. `notch`:布尔值,可选。如果为True,则绘制带缺口的箱线图,缺口表示中位数的置信区间。默认为None(即False)。 3. `sym`:字符串,可选。指定异常值的显示符号。默认为None,此时会使用默认的符号(通常为'o')。如果为'',则不显示异常值。也可以设置为其他符号,如'+','*'等。 4. `vert`:布尔值,可选。如果为True(默认),则绘制垂直箱线图;如果为False,则绘制水平箱线图。 5. `whis`:浮点数或(浮点数,浮点数)序列,可选。定义须线的位置。默认值为1.5,表示须线延伸到Q1-1.5*IQR和Q3+1.5*IQR(IQR为四分位距,即Q3-Q1)。也可以设置为一个元组(如(5,95))来指定百分位数范围,此时须线将延伸到数据的第5和第95百分位数。 6. `positions`:数组,可选。设置每个箱线图的位置。默认为[1,2,...,n]。 7. `widths`:标量或数组,可选。设置每个箱线图的宽度。默认为0.5。 8. `patch_artist`:布尔值,可选。如果为False(默认),则箱线图的箱体由线条组成;如果为True,则箱体由填充的矩形(可以填充颜色)组成。 9. `bootstrap`:整数,可选。当`notch`为True时,用于计算中位数置信区间的自助法迭代次数。默认为None(使用10000次迭代)。 10. `labels`:数组,可选。设置每个箱线图的标签。 11. `showmeans`:布尔值,可选。如果为True,则显示均值点。默认为False。 12. `showcaps`:布尔值,可选。如果为True(默认),则显示箱线图两端的须线帽。 13. `showbox`:布尔值,可选。如果为True(默认),则显示箱体。 14. `showfliers`:布尔值,可选。如果为True(默认),则显示异常值。 15. 其他用于设置样式的参数:`boxprops`, `whiskerprops`, `flierprops`, `medianprops`, `meanprops`, `capprops`,这些参数都是字典类型,用于设置箱体、须线、异常值、中位线、均值和帽线的样式(如颜色、线宽等)。 接下来,我们用一个简单的例子来展示如何使用matplotlib的boxplot函数,并解释一些常用参数。 示例:绘制一个包含一组数据的箱线图,并设置一些样式。</think>### Boxplot 参数详解 箱线图(Boxplot)是数据可视化中用于展示数据分布、离群值和统计特征的重要工具。以下是 Python 中 `matplotlib.pyplot.boxplot()` 和 `seaborn.boxplot()` 的核心参数详解及示例: --- #### **1. `matplotlib.pyplot.boxplot()` 核心参数** | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | **`x`** | 数组/序列 | 必填 | 输入数据(一维数组或多维数组序列) | | **`positions`** | 数组 | `[1, 2, ..., n]` | 箱线图的水平位置 | | **`widths`** | 浮点数 | `0.5` | 箱体的宽度 | | **`vert`** | 布尔 | `True` | 是否垂直绘制(`False`为水平) | | **`patch_artist`** | 布尔 | `False` | 是否用填充色绘制箱体 | | **`showmeans`** | 布尔 | `False` | 是否显示均值点 | | **`meanline`** | 布尔 | `False` | 是否用线表示均值(需`showmeans=True`) | | **`showcaps`** | 布尔 | `True` | 是否显示须线末端横杠 | | **`showbox`** | 布尔 | `True` | 是否显示箱体 | | **`whis`** | 浮点数 | `1.5` | 离群值范围倍数(Q3 + whis×IQR) | | **`sym`** | 字符串 | `'o'` | 离群点标记符号(如 `'+'`, `'*'`) | | **`notch`** | 布尔 | `False` | 是否绘制置信区间缺口 | --- #### **2. `seaborn.boxplot()` 特有参数** | 参数 | 说明 | |------|------| | **`hue`** | 按分类变量分组绘制 | | **`palette`** | 颜色方案(如 `'Set2'`, `'pastel'`) | | **`dodge`** | 是否避免分组重叠(默认 `True`) | | **`linewidth`** | 箱线边框宽度 | | **`fliersize`** | 离群点大小 | | **`saturation`** | 颜色饱和度(`0.0`~`1.0`) | --- ### 代码示例 #### 示例 1:Matplotlib 基础箱线图 ```python import matplotlib.pyplot as plt import numpy as np # 生成数据 data = [np.random.normal(0, std, 100) for std in range(1, 4)] plt.boxplot( x=data, positions=[1, 2, 3], widths=0.6, vert=True, patch_artist=True, showmeans=True, meanline=True, whis=1.8, sym='*' ) # 美化样式 plt.title("Boxplot Example") plt.xlabel("Groups") plt.ylabel("Values") plt.show() ``` **效果说明**: - 三个箱体水平位置为 `[1, 2, 3]`,宽度 `0.6` - 箱体填充颜色(`patch_artist=True`) - 用虚线显示均值(`showmeans=True` 和 `meanline=True`) - 离群点用 `*` 标记,离群值范围倍数 `whis=1.8` --- #### 示例 2:Seaborn 分组箱线图 ```python import seaborn as sns import pandas as pd # 创建数据框 df = pd.DataFrame({ 'Category': ['A']*50 + ['B']*50, 'Value': np.concatenate([np.random.normal(10, 2, 50), np.random.normal(15, 3, 50)]), 'Subgroup': np.tile(['X', 'Y'], 50) }) sns.boxplot( x='Category', y='Value', hue='Subgroup', data=df, palette='Set2', linewidth=1.5, fliersize=4, dodge=True # 分组并排显示 ) plt.title("Grouped Boxplot with Seaborn") plt.show() ``` **效果说明**: - 按 `Category` 分组,每组内再按 `Subgroup` 分箱 - 使用 `'Set2'` 调色板,边框宽度 `1.5` - 离群点大小 `4`,`dodge=True` 确保分组不重叠 --- #### 示例 3:自定义箱体样式 ```python # 自定义箱体颜色和离群点样式 boxprops = dict(facecolor='lightblue', edgecolor='darkblue', alpha=0.7) flierprops = dict(marker='D', markerfacecolor='red', markersize=8) plt.boxplot( data, patch_artist=True, boxprops=boxprops, flierprops=flierprops, medianprops=dict(color='black', linewidth=2) # 中位数线加粗 ) ``` --- ### 关键概念解释 1. **箱体组成**: - 箱体:Q1(25%)~ Q3(75%) - 中位线:箱体中间的横线 - 须线:箱体延伸至 `Q1 - whis×IQR` 和 `Q3 + whis×IQR` - 离群点:超出须线的数据点 2. **离群值计算**: - IQR(四分位距) = Q3 - Q1 - 上界 = Q3 + whis × IQR - 下界 = Q1 - whis × IQR 3. **缺口(`notch`)作用**: 若 `notch=True`,箱体中部显示置信区间缺口,用于比较中位数差异(缺口重叠表示无显著差异)。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LIQING LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值