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绘制箱型图
- 🔗 运行环境:python3
- 🚩 作者:K同学啊
- 🥇 精选专栏:《深度学习100例》
- 🔥 推荐专栏:《新手入门深度学习》
- 📚 选自专栏:《Matplotlib教程》
- 🧿 优秀专栏:《Python入门100题》
数据:
实现代码:
plt.subplots(figsize=(10, 6))
fig = sns.boxplot(x="区域1", y="成交价(万)", data=dataframe)
fig.axis(ymin=0, ymax=3000)
以上是关于python 绘制箱型图的主要内容,如果未能解决你的问题,请参考以下文章