python:matplotlib和seaborn 箱线图——分析及示例

箱线图统计学知识

上限值:Q1-1.5×IQR
上相邻值:距离上限值最近的值
须线:上下分位数各自与上下相邻值的距离
上四分位数(Q1):一组数据按顺序排列,从小至大第25%位置的数值
中位数:一组数据按顺序排列,从小至大第50%位置的数值
中位线(IQR):Q3-Q1上四分位数至下四分位数的距离
下四分位数(Q3):一组数据按顺序排列,从小至大第75%位置的数值
下相邻值:距离下限值最近的值
下限值:Q3+1.5×IQR
离群值(异常值):一组数据中超过上下限的真实值

python:matplotlib和seaborn 箱线图——分析及示例

数据格式如下图:

python:matplotlib和seaborn 箱线图——分析及示例

1.使用seaborn画图。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

file = 'C:\\Users\shengxin\Desktop\jiajihua.txt'
data1 = pd.read_csv(file, sep="\t")
plt.figure(figsize=(12,6))  #设置图片格式
sns.boxplot(x='type', y='Mitochondria', data=data1)

plt.show()

结果图如下:

python:matplotlib和seaborn 箱线图——分析及示例

2.使用matplotlib画箱线图:

 
plt.boxplot(x, notch=None, sym=None, vert=None, 
 
             whis=None, positions=None, widths=None, 
 
             patch_artist=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)


x:指定要绘制箱线图的数据;
notch:是否是凹口的形式展现箱线图,默认非凹口;
sym:指定异常点的形状,默认为+号显示;
vert:是否需要将箱线图垂直摆放,默认垂直摆放;
whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
positions:指定箱线图的位置,默认为[0,1,2…];
widths:指定箱线图的宽度,默认为0.5;
patch_artist:是否填充箱体的颜色;
meanline:是否用线的形式表示均值,默认用点来表示;
showmeans:是否显示均值,默认不显示;
showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
showbox:是否显示箱线图的箱体,默认显示;
showfliers:是否显示异常值,默认显示;
boxprops:设置箱体的属性,如边框色,填充色等;
labels:为箱线图添加标签,类似于图例的作用;
filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;
medianprops:设置中位数的属性,如线的类型、粗细等;
meanprops:设置均值的属性,如点的大小、颜色等;
capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
whiskerprops:设置须的属性,如颜色、粗细、线的类型等;

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

file = 'C:\\Users\shengxin\Desktop\jiajihua.txt'
data = pd.read_csv(file, sep="\t")
def sample_type():           #输出sample_type进行分类
    df = []
    sample_type1 = data.type.unique()
    for i in sample_type1:
        a=data.A[data.type == i]
        df.append(a)
    return df
tumor,normal = sample_type()[0],sample_type()[1]  #分成两类
#print(tumor)
#给箱线图添加数据标签
def xticks():                    #在箱线图上显示下面的值
    for x in range(len(sample_type())):
        mx=int(sample_type()[x].describe()['max'])
        mi=int(sample_type()[x].describe()['min'])
        a=int(sample_type()[x].describe()['25%'])
        b=int(sample_type()[x].describe()['50%'])
        c=int(sample_type()[x].describe()['75%'])
        up=int(a-1.5*(c-a))
        down=int(c+1.5*(c-a))
        xtext=[mi,up,a,b,c,mx,down]
        for y in xtext:
            plt.text(y-0.5,x+1.25,y,fontsize=11)

#设置箱线图的参数
plt.figure(figsize=(15,7))  #图片的大小
plt.boxplot([tumor,normal],vert=False,showmeans=False)
plt.xticks(np.arange(30,700,step=80))
plt.ylabel('B',fontsize=20.0)
plt.title('A',fontsize=20.0)
plt.yticks(fontsize=15.0)
xticks()
plt.show()

结果图如下:
python:matplotlib和seaborn 箱线图——分析及示例

标注:本文主要参考:https://blog.csdn.net/Arwen_H/article/details/84855825

                                       https://blog.csdn.net/shulixu/article/details/86551482