pythonmatplotlib绘图小提琴_python 箱线图和小提琴图

本文介绍了Python使用matplotlib库绘制箱线图和小提琴图的方法。箱线图展示了数据的最大值、最小值、中位数和四分位数,用于数据分散情况的统计分析;小提琴图则结合了箱线图和密度图的特性,用于显示多组数据的分布状态和概率密度。文章通过实例代码详细解释了如何自定义颜色和样式,并展示了绘制过程。
摘要由CSDN通过智能技术生成

箱形图(Box-plot)

又称为盒须图、盒式图或箱线图

是一种用作显示一组数据分散情况资料的统计图,因形状如箱子而得名。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。

箱形图绘制须使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同的母体数据时更可表现其差异。

箱形图的绘制主要包含六个数据节点,需要先将数据从大到小进行排列,然后分别计算出它的上边缘,上四分位数,中位数,下四分位数,下边缘,还有一个异常值。

计算过程:

计算上四分位数(Q3),中位数,下四分位数(Q1)

计算上四分位数和下四分位数之间的差值,即四分位数差(IQR, interquartile range)Q3-Q1

绘制箱线图的上下范围,上限为上四分位数,下限为下四分位数。在箱子内部中位数的位置绘制横线。

大于上四分位数1.5倍四分位数差的值,或者小于下四分位数1.5倍四分位数差的值,划为异常值(outliers)。

异常值之外,最靠近上边缘和下边缘的两个值处,画横线,作为箱线图的触须。

极端异常值,即超出四分位数差3倍距离的异常值,用实心点表示;较为温和的异常值,即处于1.5倍-3倍四分位数差之间的异常值,用空心点表示。

为箱线图添加名称,数轴等.

最简盒型图

import matplotlib.pyplot as plt

import numpy as np

all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]

fig = plt.figure(figsize=(8, 6))

plt.boxplot(all_data,

notch=False, # box instead of notch shape

sym='rs', # red squares for outliers

vert=True) # vertical box aligmnent

plt.xticks([y + 1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])

plt.xlabel('measurement x')

t = plt.title('Box plot')

plt.show()

自定义颜色填充盒形图

import matplotlib.pyplot as plt

import numpy as np

all_data = [np.random.normal(0, std, 100) for std in range(1, 4)]

fig = plt.figure(figsize=(8, 6))

bplot = plt.boxplot(all_data,

notch=False, # notch shape

vert=True, # vertical box aligmnent

patch_artist=True) # fill with color

colors = ['pink', 'lightblue', 'lightgreen']

for patch, color in zip(bplot['boxes'], colors):

patch.set_facecolor(color)

plt.xticks([y + 1 for y in range(len(all_data))], ['x1', 'x2', 'x3'])

plt.xlabel('measurement x')

t = plt.title('Box plot')

plt.show()

小提琴图

小提琴图 (Violin Plot)是用来展示多组数据的分布状态以及概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。跟箱形图类似,但是在密度层面展示更好。在数据量非常大不方便一个一个展示的时候小提琴图特别适用。

小提琴图概念图

990898bee9c5

1503464-20190813102438161-852073569.png

import matplotlib.pyplot as plt

import numpy as np

fig, axes = plt.subplots(figsize=(12, 5))

all_data = [np.random.normal(0, std, 100) for std in range(6, 10)]

axes.violinplot(all_data,

showmeans=False,

showmedians=True

)

axes.set_title('violin plot')

# adding horizontal grid lines

axes.yaxis.grid(True)

axes.set_xticks([y + 1 for y in range(len(all_data))], )

axes.set_xlabel('xlabel')

axes.set_ylabel('ylabel')

plt.setp(axes, xticks=[y + 1 for y in range(len(all_data))],

xticklabels=['x1', 'x2', 'x3', 'x4'],

)

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值