| total_bill | tip | sex | smoker | day | time | size | |
|---|---|---|---|---|---|---|---|
| 0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
| 1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。在seaborn中,boxplot()方法用于绘制箱型图。boxplot()主要参数如下:
x, y为绘图时指定的x轴和y轴数据,x、y如果有一个是离散型数据(或者说定性数据、分类数据),另一个是连续性数值数据,seaborn将会根据其中的离散型数据对另一个连续性数据进行绘制其在另一条数轴上的分布。
fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(8, 3))pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('x="day", y="total_bill"')pic = sns.boxplot(x="total_bill", y="day", data=tips, ax=ax[1])pic.set_title('x="total_bill", y="day"')
Text(0.5, 1.0, 'x="total_bill", y="day"')

hue和dodge常常需要一起配合使用,hue只是根据指定字段绘制不同颜色的散点,进一步地,dodge为Flase可以将不同颜色的箱体重叠。
fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(8, 3))pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[0], hue="smoker")pic.set_title('hue="smoker"')pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[1], hue="smoker", dodge=False)pic.set_title('hue="smoker", dodge=False')
Text(0.5, 1.0, 'hue="smoker", dodge=False')

fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(8, 3))pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('default order')pic = sns.boxplot(x="day", y="total_bill", data=tips, order=['Sun', 'Sat', 'Thur', 'Fri'], ax=ax[1])pic.set_title('"Sun", "Sat", "Thur", "Fri"')
Text(0.5, 1.0, '"Sun", "Sat", "Thur", "Fri"')

注意,color只能一次性设置所有条形统一的颜色,如果要为条形设置不同颜色,要通过palette参数:
ax = sns.boxplot(x="day", y="total_bill", data=tips, color="red")

ax = sns.boxplot(x="day", y="total_bill", data=tips, color="red",saturation=0.5 )

fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(8, 3))pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('default width')pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[1], width=0.5)pic.set_title('width=0.5')
Text(0.5, 1.0, 'width=0.5')

fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(8, 3))pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('default fliersize: 5')pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[1], fliersize=1)pic.set_title('fliersize=1')
Text(0.5, 1.0, 'fliersize=1')

fig, ax =plt.subplots(1,3,constrained_layout=True, figsize=(8, 3))pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('default linewidth')pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[1], linewidth=1)pic.set_title('linewidth=1')pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[2], linewidth=5)pic.set_title('linewidth=5')
Text(0.5, 1.0, 'linewidth=5')

fig, ax =plt.subplots(1,3,constrained_layout=True, figsize=(8, 3))pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('default whis: 1.5')pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[1], whis=2)pic.set_title('whis=2')pic = sns.boxplot(x="day", y="total_bill", data=tips, ax=ax[2], whis=3)pic.set_title('whis=3')
Text(0.5, 1.0, 'whis=3')

boxenplot()是为更大的数据集绘制增强的箱型图。这种风格的绘图最初被命名为“信值图”,因为它显示了大量被定义为“置信区间”的分位数。它类似于绘制分布的非参数表示的箱形图,其中所有特征对应于实际观察的数值点。通过绘制更多分位数,它提供了有关分布形状的更多信息,特别是尾部数据的分布。
作为增强版的boxplot(),boxenplot()大部分参数和boxplot()是相似的。现在就剩下不同的参数进行说明:
k_depth:“proportion” 或 “tukey” 或 “trustworthy”,也可以是标量整数,通过增大百分比的粒度控制绘制的盒形图数目。每个参数代表利用不同的统计特性对异常值的数量做出不同的假设。
scale:“linear” 或 “exponential” 或 “area”,用于控制增强箱型图宽度的方法。所有参数都会给显示效果造成影响。 “linear” 通过恒定的线性因子减小宽度,“exponential” 使用未覆盖的数据的比例调整宽度, “area” 与所覆盖的数据的百分比成比例。
outlier_prop:float,被认为是异常值的数据比例。与 k_depth 结合使用以确定要绘制的百分位数。默认值为 0.007 作为异常值的比例。该参数取值应在[0,1]范围内。
boxenplot()用的不多,大部分参数与boxplot()一样,不再演示,增强箱型图外观如下图所示:
_ = sns.boxenplot(x="day", y="total_bill", data=tips)

violinplot()是用来绘制箱形图和核密度估计组合图,即小提琴图。小提琴形图的作用与箱形图类似,它显示了一个或多个分类变量的几个级别的定量数据的分布,我们可以通过观察来比较这些分布。与盒形图不同,因为盒形图的所有绘图组件都对应于实际数据点,小提琴形图具有底层分布的核密度估计。
x, y为绘图时指定的x轴和y轴数据,x、y如果有一个是离散型数据(或者说定性数据、分类数据),另一个是连续性数值数据,seaborn将会根据其中的离散型数据对另一个连续性数据进行绘制其在另一条数轴上的分布。
fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(8, 3))pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('x="day", y="total_bill"')pic = sns.violinplot(x="total_bill", y="day", data=tips, ax=ax[1])_ = pic.set_title('x="total_bill", y="day"')

hue和dodge常常需要一起配合使用,hue只是根据指定字段绘制不同颜色的散点,进一步地,dodge为Flase可以将不同颜色的箱体重叠。
fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(8, 3))pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[0], hue="smoker")pic.set_title('hue="smoker"')pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[1], hue="smoker", dodge=False)_ = pic.set_title('hue="smoker", dodge=False')

fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(8, 3))pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('default order')pic = sns.violinplot(x="day", y="total_bill", data=tips, order=['Sun', 'Sat', 'Thur', 'Fri'], ax=ax[1])_ = pic.set_title('"Sun", "Sat", "Thur", "Fri"')

注意,color只能一次性设置所有条形统一的颜色,如果要为条形设置不同颜色,要通过palette参数:
ax = sns.violinplot(x="day", y="total_bill", data=tips, color="red")

ax = sns.violinplot(x="day", y="total_bill", data=tips, color="red",saturation=0.5 )

fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(12, 3))pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[0], hue="smoker")pic.set_title('no split')pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[1], hue="smoker", split=True)pic.set_title('split=True')
Text(0.5, 1.0, 'split=True')

ax = sns.violinplot(x="day", y="total_bill", hue="smoker", data=tips, palette="muted", split=True)

fig, ax =plt.subplots(1,3,constrained_layout=True, figsize=(8, 3))pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('default linewidth')pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[1], linewidth=1)pic.set_title('linewidth=1')pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[2], linewidth=5)pic.set_title('linewidth=5')
Text(0.5, 1.0, 'linewidth=5')

fig, ax =plt.subplots(1,2,constrained_layout=True, figsize=(12, 3))pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[0])pic.set_title('default width')pic = sns.violinplot(x="day", y="total_bill", data=tips, ax=ax[1], width=1)_ = pic.set_title('width=1')

作者:奥辰
微信号:chb1137796095
Github:https://github.com/ChenHuabin321
欢迎加V交流,共同学习,共同进步!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。