Python Matplotlib箱线图boxplot()函数参数详解与实战
本文详解Python Matplotlib库中boxplot()函数的使用方法。涵盖箱线图的基本构成、中位数与四分位数的计算,深入解析notch、whis、sym等关键参数对图形样式及异常值显示的影响。通过多组数据对比及实际代码示例,展示如何自定义颜色、标签及统计标识,帮助开发者高效绘制专业级箱线图。
箱线图
箱线图主要用于展示数据的分布特征,包括上下四分位值和中位数等统计量,同时能够直观地识别数据中的异常点。Matplotlib库提供了boxplot()函数来绘制此类图表。
import matplotlib.pyplot as plt
_ = plt.boxplot(range(10)) # 10个数,0-9
plt.show()
尽管箱线图外观简洁,但其蕴含的数据信息十分丰富。如上图中橙色线条所示,该线代表中位数;中间矩形条的上下边界分别对应上四分位数(即75%的数据小于该值)和下四分位数(即25%的数据小于该值)。从矩形条延伸出的两条线段(须)的终点则表示数据的最大值和最小值。
import numpy as np
print(np.median(np.arange(10))) # 中位数
print(np.percentile(np.arange(10), 25)) # 下4分位数,也叫第1分位数
print(np.percentile(np.arange(10), 75)) # 上4分位数,也叫第3分位数
4.5
2.25
6.75
Process finished with exit code 0
boxplot()函数提供了丰富的自定义选项,允许用户精细控制图表的显示效果。
plt.boxplot(x, notch=None, sym=None, vert=None,
whis=None, positions=None, widths=None,
patch_artist=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)
● x:指定绘图所使用的数据。
● notch:布尔值,决定是否以凹口形式展示箱线图,默认为非凹口。
● sym:字符串,指定异常点的显示形状,默认为加号(+)。
● vert:布尔值,决定箱线图是否垂直放置,默认为垂直。
● whis:浮点数,指定上下须与上下四分位之间的距离,默认为1.5倍的四分位距(IQR)。
● positions:数组,指定箱线图在x轴上的位置,默认为[0, 1, 2, ...]。
● widths:浮点数,指定箱线图的宽度,默认为0.5。
● patch_artist:布尔值,决定是否填充箱体颜色。
● meanline:布尔值,决定是否以线条形式表示均值,默认为点。
● showmeans:布尔值,决定是否显示均值,默认为不显示。
● showcaps:布尔值,决定是否显示箱线图顶端和末端的横线(帽),默认为显示。
● showbox:布尔值,决定是否显示箱线图的箱体,默认为显示。
● showfliers:布尔值,决定是否显示异常值,默认为显示。
● boxprops:字典,设置箱体的属性,如边框颜色、填充色等。
● labels:列表,为箱线图添加标签,作用类似于图例。
● flierprops:字典,设置异常值的属性,如异常点的形状、大小、填充色等。
● medianprops:字典,设置中位数的属性,如线的类型、粗细等。
● meanprops:字典,设置均值的属性,如点的大小、颜色等。
● capprops:字典,设置箱线图顶端和末端线条(帽)的属性,如颜色、粗细等。
● whiskerprops:字典,设置须(whiskers)的属性,如颜色、粗细、线的类型等。
箱线图通常用于多组数据的比较分析。
以下代码展示了如何绘制3组简单数据的箱线图,并添加了凹口、均值点、指定颜色以及每组的标签。
import matplotlib.pyplot as plt
a = plt.boxplot([range(10), range(20), range(30)],
patch_artist=True,
boxprops={'color': 'blue'},
notch=True, showmeans=True,
labels=['A', 'B', 'C'])
plt.show()
补充:plt.boxplot()函数绘制箱图、常用方法
实战
def plt_box_iamge(df):
"""
snrr的五个范围为[5,10)、[10,15)、[15,20)、[20,30)、[30-),按照五个snrr范围计算对应redchi的箱图
:param df:包含snrr以及redchi的csv数据(dataFrame)。
:return:
"""
# 根据snrr范围对redchi进行筛选。
df1 = df.loc[df['lam_snrr'] >= 5]
redchi_1 = df1.loc[df1['lam_snrr'] < 10].redchi
df2 = df.loc[df['lam_snrr'] >= 10]
redchi_2 = df2.loc[df2['lam_snrr'] < 15].redchi
df3 = df.loc[df['lam_snrr'] >= 15]
redchi_3 = df3.loc[df3['lam_snrr'] < 20].redchi
df4 = df.loc[df['lam_snrr'] >= 20]
redchi_4 = df4.loc[df4['lam_snrr'] < 30].redchi
redchi_5 = df.loc[df['lam_snrr'] >= 30].redchi
# 绘图
ax = plt.subplot()
ax.boxplot([redchi_1, redchi_2, redchi_3, redchi_4, redchi_5])
# 设置轴坐标值刻度的标签
ax.set_xticklabels(['5<=snrr<10', '10<=snrr<15', '15<=snrr<20', '20<=snrr<30', '30<=snrr'], fontsize=8)
# 保存图片
plt.savefig('./images/box.jpg')
plt.show()
if __name__ == '__main__':
df = pd.read_csv('./inputfile/lamost6w_new.csv')
df_sc = screening(df) # 筛选数据 (lamost数据应该在正常值范围内,不然因为数值差过大会导致绘制不出图像!)
plt_box_iamge(df_sc)
常用方法
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(100)
data = np.random.normal(size=(1000,4),loc=0,scale=1)
ax = plt.subplot()
ax.boxplot(data) # 绘图
ax.set_xlim([0,5]) # 设置x轴值的范围 rotation=30
# ax.set_xticks() # 自定义x轴的值
ax.set_xlabel("xlabel") # 设置x轴的标签
ax.set_xticklabels(['A','B','C','D'], rotation=30,fontsize=10) # 设置x轴坐标值的标签 旋转角度 字体大小
ax.set_title("xcy") # 设置图像标题
ax.legend(labels= ['A','B','C','D'],loc='best',) # 增加图例
ax.text(x=0.2 , y=3.5 , s="test" ,fontsize=12) # 增加注
plt.show()总结
到此这篇关于Python Matplotlib绘制箱线图boxplot()函数详解的文章就介绍到这了,更多相关Matplotlib箱线图boxplot()函数内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









