python 绘制箱型图

Posted Vergil_Zsh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 绘制箱型图相关的知识,希望对你有一定的参考价值。

用法

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()

seaborn教程 | 使用DataFrame绘制箱型图


数据:

实现代码:

plt.subplots(figsize=(10, 6))
fig = sns.boxplot(x="区域1", y="成交价(万)", data=dataframe)
fig.axis(ymin=0, ymax=3000)

以上是关于python 绘制箱型图的主要内容,如果未能解决你的问题,请参考以下文章

seaborn教程 | 使用DataFrame绘制箱型图

【R语言】--- 箱型图

Seaborn绘制箱型图

Seaborn绘制箱型图

箱型图分析的python代码

扇形图+雷达图+箱型图绘制