matplotlib盒图

本文详细介绍了Matplotlib库在Python中绘制盒图和小提琴图的方法,包括基本的盒图外观、细节设置及小提琴图的绘制。通过实例展示了如何使用不同参数调整盒图的形状、颜色以及离群点的表示,并对比了盒图与小提琴图在展示数据分布特性上的差异。
摘要由CSDN通过智能技术生成


盒图

在这里插入图片描述

一、盒图是什么?

盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的。它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(max)。也可以往盒图里面加入平均值(mean)。如上图。下四分位数、中位数、上四分位数组成一个“带有隔间的盒子”。上四分位数到最大值之间建立一条延伸线,这个延伸线成为“胡须(whisker)”。
由于现实数据中总是存在各式各样地“脏数据”,也成为“离群点”,于是为了不因这些少数的离群数据导致整体特征的偏移,将这些离群点单独汇出,而盒图中的胡须的两级修改成最小观测值与最大观测值。这里有个经验,就是最大(最小)观测值设置为与四分位数值间距离为1.5个IQR(中间四分位数极差)。即

  • IQR = Q3-Q1,即上四分位数与下四分位数之间的差,也就是盒子的长度。
  • 最小观测值为min = Q1 - 1.5*IQR,如果存在离群点小于最小观测值,则胡须下限为最小观测值,离群点单独以点汇出。如果没有比最小观测值小的数,则胡须下限为最小值。
  • 最大观测值为max = Q3 -1.5*IQR,如果存在离群点大于最大观测值,则胡须上限为最大观测值,离群点单独以点汇出。如果没有比最大观测值大的数,则胡须上限为最大值。
    在这里插入图片描述

二、简单盒图外观

1.jupyter

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
hu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
plt.boxplot(hu_data,notch=False,sym='s',vert=True)
plt.xticks([y+1 for y in range(len(hu_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('box plot')

在这里插入图片描述

2.pycharm

import numpy as np
import matplotlib.pyplot as plt
hu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
#sym为离群点的默认标记符号,s为正方形,vert设置图的方向true为竖的,notch设置图的形状
plt.boxplot(hu_data,notch=False,sym='s',vert=True)
plt.xticks([y+1 for y in range(len(hu_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('box plot')
plt.show()

在这里插入图片描述

三、盒图细节设置

1.jupyter

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
hu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
bplot=plt.boxplot(hu_data,notch=False,sym='s',vert=True)
plt.xticks([y+1 for y in range(len(hu_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('box plot')
for components in bplot.keys():
    for line in bplot[components]:
        line.set_color('b')

在这里插入图片描述

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
hu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
#vert设置图的方向,notch设置形状的不同
bplot=plt.boxplot(hu_data,notch=True,sym='s',vert=False)
plt.yticks([y+1 for y in range(len(hu_data))],['y1','y2','y3'])
plt.ylabel('y')
plt.title('box plot')

在这里插入图片描述

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
hu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
#vert设置图的方向,notch设置形状的不同,patch_artist为可对图的颜色进行填充
bplot=plt.boxplot(hu_data,notch=False,sym='s',vert=True,patch_artist=True)
#设置x轴上的参数
plt.xticks([y+1 for y in range(len(hu_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('box plot')
colors=['pink','lightblue','lightgreen']
for pathch,color in zip(bplot['boxes'],colors):
    pathch.set_facecolor(color)

在这里插入图片描述

2.pycharm

import numpy as np
import matplotlib.pyplot as plt
hu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
bplot=plt.boxplot(hu_data,notch=False,sym='s',vert=True)
plt.xticks([y+1 for y in range(len(hu_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('box plot')
for components in bplot.keys():
    for line in bplot[components]:
        line.set_color('b')
plt.show()

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
hu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
#vert设置图的方向,notch设置形状的不同
bplot=plt.boxplot(hu_data,notch=True,sym='s',vert=False)
plt.yticks([y+1 for y in range(len(hu_data))],['y1','y2','y3'])
plt.ylabel('y')
plt.title('box plot')
plt.show()

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
hu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
#vert设置图的方向,notch设置形状的不同,patch_artist为可对图的颜色进行填充
bplot=plt.boxplot(hu_data,notch=False,sym='s',vert=True,patch_artist=True)
#设置x轴上的参数
plt.xticks([y+1 for y in range(len(hu_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('box plot')
colors=['pink','lightblue','lightgreen']
for pathch,color in zip(bplot['boxes'],colors):
    pathch.set_facecolor(color)
plt.show()

在这里插入图片描述

四、小提琴图

1.jupyter

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(12,5))
hu_data=[np.random.normal(0,std,100) for std in range(6,10)]
axes[0].violinplot(hu_data,showmeans=False,showmedians=True)
axes[0].set_title('violin plot')
axes[1].boxplot(hu_data)
axes[1].set_title('box plot')
for ax in axes:
    ax.yaxis.grid('True')
    ax.set_xticks([y+1 for y in range(len(hu_data))])
plt.setp(axes,xticks=[y+1 for y in range(len(hu_data))],xticklabels=['x1','x2','x3','x4'])    

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Anan.3

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

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

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

打赏作者

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

抵扣说明:

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

余额充值