参考链接:
https://www.cnblogs.com/metafullstack/archive/2023/08/23/17651922.html
https://matplotlib.org/stable/gallery/statistics/boxplot_color.html#sphx-glr-gallery-statistics-boxplot-color-py
概要
箱线图(箱形图、盒须图)是一种基于5个统计量(上边界、上四分位数、中位数、下四分位数以及下边界)显示数据分布的标准化方法,其可以用来检测数据的异常值和数据分布的形状,以及数据集的离散程度。图中矩形框显示数据集的上下四分位数,而矩形框中延伸出的线段(触须)则用于显示其余数据的分布位置,剩下超过上下四分位间距的数据点则被视为“异常值”。
函数
matplotlib.pyplot.boxplot(
x,
notch=None,
sym=None,
vert=None,
whis=None,
positions=None,
widths=None,
patch_artist=None,
bootstrap=None,
usermedians=None,
conf_intervals=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,
manage_ticks=True,
autorange=False,
zorder=None,
capwidths=None, *,
data=None)
参数 | 功能 | 参数 | 功能 |
---|---|---|---|
常规参数 | |||
x | 指定要绘制箱形图的数据 | notch | 是否绘制带缺口的箱形图 |
patch_artist | 是否填充箱体的颜色 | vert | 是否将箱线图垂直摆放 |
widths | 指定箱线图的宽度 | sym | 指定异常点的形状 |
whis | 指定上下边界与上下四分位数的距离 | labels | 为箱线图添加标签 |
capwidths | 设置须线帽长度 | position | 指定箱线图的位置 |
显示控制参数 | |||
showmeans | 是否显示均值点 | meanline | 是否显示均值线 |
showbox | 是否显示箱形图的箱体 | showcaps | 是否显示须线帽 |
showfliers | 是否显示异常值 | ||
细节属性参数 | |||
medianprops | 设置中位线属性 | meanprops | 设置均值点属性 |
boxprops | 设置箱体属性 | capprops | 设置须帽属性 |
whiskerprops | 设置须线属性 | flierprops | 设置异常点属性 |
boxplot() 函数是以字典格式返回箱线图的每个组件对象,每个键的键值为matplotlib.lines.Line2D类对象的列表,具体包括:
参数 | 功能 |
---|---|
boxes | 箱体的主体显示四分位数; |
medians | 每个箱体的中位数水平线; |
whiskers | 每个箱体的须线; |
caps | 须线末端的直线,即须线帽; |
fliers | 异常值; |
means | 均值点或直线。 |
实现代码
# 设置字体, 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
fig, ax = plt.subplots()
# 数据根据自己的进行修改
all_data = [ever.flatten(), ever_old.flatten(), ever_aga.flatten(), ever_test.flatten(), ever_mga.flatten()]
boxplot = ax.boxplot(
x=all_data,
vert=True,
widths=0.3,
labels=['Erjia', 'GA', 'aga', 'test', 'mga'],
patch_artist=True,
showmeans=True, # 显示均值点
meanline=True,
meanprops={ # 设置均值点属性
'marker': 'o', 'markersize': 7.5, 'markeredgewidth': 0.75, 'markerfacecolor': '#b7e1a1', 'markeredgecolor': 'r', 'color': 'k', 'linewidth': 1.5},
whiskerprops={ # 设置须的线条属性
'linestyle': '--', 'linewidth': 1.2, 'color': '#480656'
},
capprops={
'linestyle': '-', 'linewidth': 1.5, 'color': '#480656'
},
)
title = ax.set_title('Fitness')
colors = ['#DAF6E1', '#F6F8C1', '#FFCC77', '#9392B2', '#13789F']
for patch, color in zip(boxplot['boxes'], colors):
patch.set_facecolor(color)
ax.yaxis.grid(True)
ax.set_xlabel("对比")
ax.set_ylabel("适应度值")