参考资料:用python动手学统计学,帮助文档
使用seaborn.violinplot()函数绘制箱线图
sns.violinplot()的做出来的小提琴图比plt.violinplot()更像小提琴。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as snsdf=pd.DataFrame(data={'type':['A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B'],'value':[2,3,3,4,4,4,4,5,5,6,5,6,6,7,7,7,7,8,8,9]
})
ser=pd.Series(data=[2,3,3,4,4,4,4,5,5,6])sns.violinplot(ser)
下面介绍sns.violinplot()函数中常用的几个重要参数(参数等号后为默认设置):
(1)data=None,就是数据源。
(2)x=None, y=None,如果不指定x和y,则以整列数据绘制一个小提琴;如果制定了x和y,则会按照分类型数据对数值型数据进行分组,来绘制小提琴。下图为有无x,y参数的区别:
sns.violinplot(df)
sns.violinplot(df,x='type',y='value')
(3)hue=None,指定数据系列,通常与x,y共同使用。
df=pd.DataFrame(data={'type':['A','A','A','A','A','A','A','A','A','A','B','B','B','B','B','B','B','B','B','B'],'value':[2,3,3,4,4,4,4,5,5,6,5,6,6,7,7,7,7,8,8,9],'hue':[1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]
})sns.violinplot(df,x='type',y='value',hue='hue')
(4)order=None,hue_order=None,用于指定小提琴的显示顺序。
sns.violinplot(df,x='type',y='value',order=['B','A'])
sns.violinplot(df,x='type',y='value',hue='hue',hue_order=[2,1])
(5)bw='scott',指定绘制小提琴时的核密度曲线的计算方式,通常默认即可。
(6)cut=2,用于设置小提琴的核密度曲线两端的延长线,当cut=0时,图形效果等于plt.violinplot(),如下:
sns.violinplot(ser,cut=0)
(7)scale='area',对小提琴的大小进行设置,“area”表示所有小提琴的面积一样,“width”表示所有小提琴的宽度一样,“count”表示小提琴的宽度与数据桶中数据量一致。
(8)scale_hue=True,当设置了hue参数时,设置小提琴图的计算标准,通常采用默认值。
(9)inner='box',用于设置小提琴内部的迷你图,默认是箱线图;“quartiles”表示绘制四分位线;“points”表示绘制数据点;“stick”是将数据点绘制为数据线;若设置为None,则内部为空。
sns.violinplot(df,x='type',y='value',inner='quartiles')
sns.violinplot(df,x='type',y='value',inner='points')
sns.violinplot(df,x='type',y='value',inner='stick')
sns.violinplot(df,x='type',y='value',inner=None)
(10)split=False,当设置hue参数后,用于设置hue是分裂显示还是独立显示。默认为False,即独立显示,当设置为True时,为分裂显示,效果如下:
sns.violinplot(df,x='type',y='value',hue='hue',split=True)
(11)dodge=True,当设置hue参数后,用于设置hue是否错位显示。默认为True,错位显示;当设置False时,效果如下:
sns.violinplot(df,x='type',y='value',hue='hue',dodge=False)
(12)orient=None,当x和y都是数值型数据时,用于指定沿哪个方向绘制小提琴,效果如下:
sns.violinplot(df,x='value',y='hue',orient='h')