Matplotlib和Seaborn之箱线图
箱线图
箱线图是展示数字变量和分类变量之间关系的另一种方式。与小提琴图相比,箱线图更侧重于数据的摘要,主要报告每个分类级别数字值的一组描述统计学信息。可以使用 seaborn 的 boxplot
函数创建箱线图。
plt.figure(figsize = [10, 5])
base_color = sb.color_palette()[0]
# left plot: violin plot
plt.subplot(1, 2, 1)
ax1 = sb.violinplot(data = df, x = 'cat_var', y = 'num_var', color = base_color)
# right plot: box plot
plt.subplot(1, 2, 2)
sb.boxplot(data = df, x = 'cat_var', y = 'num_var', color = base_color)
plt.ylim(ax1.get_ylim()) # set y-axis limits to be same as left plot
注意,这里使用了 "color" 参数使每个方框的颜色一样。为了更好地比较小提琴图和箱线图,我们在第二个图形上添加了 ylim
表达式,使两个图形的 y 轴范围相符。我们将 violinplot
返回的 Axes 对象分配给一个变量,并使用 ax1
以程序方式获得这些范围值。
(文档:Axes 对象)
image.png小提琴图的内部方框和线条对应于箱线图的方框和须线。在箱线图中,方框的中间线条表示分布的中值,方框的顶部和底部分别表示数据的第三四分位数和第一四分位数。因此,方框的高度是四分位差 (IQR)。从方框的顶部和底部,须线表示从第一四分位数或第三四分位数到最低值或最大值的范围。通常,须线长度会设置最大范围;默认情况下,设为 1.5 乘以 IQR。对于 γ 级别,底部须线下方有数据,表示在第一四分位数下方有大于 1.5x IQR 的单个离群值。
对比两个图形后发现,箱线图对数据的总结比小提琴图要整洁。使用箱线图更容易比较不同组的统计值。如果你有很多组数据要比较,或者要构建解释性图形,则箱线图更值得考虑。可以从箱线图中清晰地看出,δ 组的中值最低。另一方面,箱线图对数据分布的细节描绘没有小提琴图清晰:无法在 α 级别的值中看到微弱的双峰性。小提琴图可能更适合探索数据,尤其因为 seaborn 还默认地包含箱线图实现。
其他版本
和 violinplot
一样,boxplot
也可以水平地呈现箱线图,将数字和分类特征设为相应的参数即可。
base_color = sb.color_palette()[0]
sb.boxplot(data = df, x = 'num_var', y = 'cat_var', color = base_color)
image.png
在 violinplot
中,除了默认的迷你箱线图之外,还有一个在小提琴图中绘制摘要统计信息的其他选项。通过设置 inner = 'quartile’
,将在三个中间四分位数的小提琴区域绘制三条线。很粗的破折线表示中值,分别位于两侧的两个破折线更短的线条表示第一四分位数和第三四分位数。
base_color = sb.color_palette()[0]
sb.violinplot(data = df, x = 'cat_var', y = 'num_var', color = base_color,
inner = 'quartile')
image.png