用法

Axes.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, *, data=None)

该框从数据的第一个四分位数(Q1)延伸到第三个四分位数(Q3),中间有一条线。晶须从盒子中伸出四分位间距(IQR)的1.5倍

参数说明

参数 解释
x 输入数据。如果是二维数组,则为x中的每一列绘制一个箱线图。如果是一系列1维数组,则为x中的每个数组绘制一个箱线图
notch 是绘制凹口箱线图(True),还是绘制矩形箱线图(False)。缺口代表中位数周围的置信区间(CI)。bootstrap的文档描述了默认情况下如何计算槽口的位置,但是也可以通过设置conf_interval参数来覆盖槽口的位置。
sym 传单点的默认符号。空字符串(“”)隐藏传单。如果没有,则传单默认为“b+”
vert 如果为True,则绘制垂直框。如果为False,则绘制水平框。
whis 简单来说就是箱须的位置,指定上下须跟上下四分位的距离,默认是5倍四分位差
bootstrap 指定是否引导缺口盒形图中位数周围的置信区间。如果bootstrap为None,则不执行bootstrap,并使用基于高斯的渐近近似计算槽口
usermedians 设置每个元素的中位数,默认是由matplotlib计算
positions 盒子的位置。刻度和限制将自动设置为与位置匹配
widths 盒子的宽度。默认值为0.5或0.15*
patch_artist 如果为False,则使用Line2维生成长方体
labels 每个数据集的标签(每个数据集一个)
manage_ticks 如果为True,将调整记号位置和标签,以匹配箱线图位置
autorange 如果为True,且数据分布使得第25百分位和第75百分位相等,则将whis设置为(0,100),从而使盒须端位于数据的最小值和最大值。
meanline 是否用线的形式表示均值,默认用点来表示
zorder 箱型图中的zorder–计算机语言,用于设置顺序
showcaps 是否显示箱型图顶端和末端的两条线,默认是显示
showbox 是否显示箱型图的箱体,默认显示
showfliers 是否显示异常值,默认显示
boxprops 设置箱体的属性,如边框色,填充色等
flierprops 设置异常值的属性,如形状,大小、填充色等
medianprops 设置中位数的属性,如线性的类型、属性(粗细)等
meanprops 设置均值的属性,如点的大小、颜色等
capprops 设置箱型图顶端和末端线条的属性,颜色、粗细等
whiskerprops 设置须的属性,如颜色,粗细、线的类型等
案例
import numpy as np
import matplotlib.pyplot as plt

# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))
fig = plt.figure()
view = plt.boxplot(data)
plt.show()


** notch**

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('添加notch')
view = plt.boxplot(data, notch=4)
plt.show()


sym

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('添加notch')
view = plt.boxplot(data, sym='*')
plt.show()


vert
默认情况下是True

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('vert=True')
view = plt.boxplot(data,vert=True)

plt.subplot(122)
plt.title('vert=False')
view = plt.boxplot(data, vert=False)
plt.show()


whis

import numpy as np
import matplotlib.pyplot as plt

# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))

plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('添加whis')
view = plt.boxplot(data, whis=1)
plt.show()


positions

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('添加positions')
view = plt.boxplot(data, positions=[4,2,1])
plt.show()


widths

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('添加widths')
view = plt.boxplot(data, widths=[2,0.5,0.7])
plt.show()


patch_artist
如果为Flase,则使用Line2维生成长方体
labels

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
# 每个数据集一个
plt.title('设置labels')
view = plt.boxplot(data, labels=['天', '才', '伪'])
plt.show()


meanline, meanprops

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data, showmeans=True, meanline=False)

plt.subplot(122)
# 必须meanline为True时,meanprops才起作用
plt.title('设置meanline为True,以线形式显示平均值,并设置属性')
view = plt.boxplot(data, showmeans=True, meanline=True,meanprops={'color': 'cyan', 'linewidth': 1.5})
plt.show()


**showcaps **

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('设置showcaps为False')
view = plt.boxplot(data, showcaps=False)
plt.show()


showfliers(是否显示异常值)

import matplotlib.pyplot as plt
import pandas as pd


plt.rcParams['font.sans-serif'] = ['SimHei']

# 新建一个空的DataFrame
data = pd.DataFrame()
data["英语"] = [76, 90, 97, 71, 70, 93, 86, 83, 78, 40, 81]

plt.subplot(121)
plt.title('标准情况下,为显示异常值')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('不限显示异常值,showfliers=False')
view = plt.boxplot(data,showfliers=False)
plt.show()


boxprops
这里有一点需要说明下上面一个参数patch_artist,必须时为2DLine才可以绘制facecolor,不然会报错

AttributeError: 'Line2D' object has no property 'facecolor'

所以必须添加参数patch_artist=True

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('设置boxprops')
view = plt.boxplot(data, patch_artist=True, boxprops={'facecolor': 'cyan', 'linewidth': 0.8,'edgecolor': 'red'})
plt.show()


medianprops
设置中位数线的属性,类型等

import numpy as np
import matplotlib.pyplot as plt


# 创建数据
data = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))


plt.figsize=((10,8))
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus']=False

plt.subplot(121)
plt.title('标准情况下')
view = plt.boxplot(data)

plt.subplot(122)
plt.title('设置medianprops')
view = plt.boxplot(data, medianprops={'linewidth': 0.8,'color': 'blue'})
plt.show()

来源:Vergil_Zsh

物联沃分享整理
物联沃-IOTWORD物联网 » python 绘制箱型图

发表评论