前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-matplotlib 箱线图绘制

Python-matplotlib 箱线图绘制

作者头像
DataCharm
发布2021-02-22 15:15:34
4K0
发布2021-02-22 15:15:34
举报

01. 引言

箱线图(Boxplot) 是一种用作显示一组数据分散情况资料的统计图表,本期推文就如何使用matplotlib和seaborn 绘制出高度定制化的箱线图做出详细的讲解。

02. 箱线图基本介绍

箱线图,又称箱形图(boxplot)或盒式图,不同于一般的折线图、柱状图或饼图等图表,其包含一些统计学的均值分位数极值等统计量,该图信息量较大,不仅能够分析不同类别数据平均水平差异,还能揭示数据间离散程度、异常值、分布差异等。具体含义可通过如下图表进行说明:

(以上图来源于网络,如侵权,望告知,删除)

03. matplotlib绘制

Matplotlib 中绘制箱线图的函数为 boxplot (),但要想进行定制化绘制需求,则需设置较多的绘图参数,boxplot()基本语法如下:

下面就常用的属性进行介绍:

参数 说明

x 指定要绘制箱线图的数据

notch 是否是凹口的形式展现箱线图

sym 指定异常点的形状

vert 是否需要将箱线图垂直摆放

whis 指定上下须与上下四分位的距离

positions 指定箱线图的位置

widths 指定箱线图的宽度

patch_artist 是否填充箱体的颜色;

meanline 是否用线的形式表示均值

showmeans 是否显示均值

showcaps 是否显示箱线图顶端和末端的两条线

showbox 是否显示箱线图的箱体

showfliers 是否显示异常值

boxprops 设置箱体的属性,如边框色,填充色等

labels 为箱线图添加标签

filerprops 设置异常值的属性

medianprops 设置中位数的属性

meanprops 设置均值的属性

capprops 设置箱线图顶端和末端线条的属性

whiskerprops 设置须的属性

2.1 数据

现有数如下(部分):

详细绘制代码如下:

代码语言:javascript
复制
import matplotlib.pyplot as plt

box_1 = data_box['box01']
box_2 = data_box['box02']

plt.rcParams['font.family'] = ["Times New Roman"]
fig, ax = plt.subplots(figsize=(6,4),dpi=200)

box_plot01 = ax.boxplot(box_1,positions =[1],patch_artist = True,widths=0.4,vert=False,
                       boxprops={'color':'black','facecolor':'dimgray','lw':0.7},
                       medianprops={'color':'black'},
                       capprops={'color':'black','lw':.9},
                       whiskerprops={'color':'black','lw':0.9},
                       flierprops={'lw':.8,'alpha':.7,'markersize':3.5,'marker':'d'})

box_plot02 = ax.boxplot(box_2,positions =[2],patch_artist = True,widths=0.4,vert=False,
                       boxprops={'color':'black','facecolor':'darkgray','lw':0.7},
                       medianprops={'color':'black'},
                       capprops={'color':'black','lw':.9},
                       whiskerprops={'color':'black','lw':0.9},
                       flierprops={'lw':.8,'alpha':.5,'markersize':3.5,'marker':'d'})
#添加图例
ax.legend([box_plot01["boxes"][0], box_plot02["boxes"][0]], ['Train sample', 'Test_sample'], 
          loc='upper right',frameon=False)
#设置刻度属性
ax.tick_params(left=True,bottom=True,direction='in',labelsize=12)
#设置y轴范围
ax.set_ylim(.5,2.8)
#设置y轴刻度label
ax.set_yticklabels([])
#设置x、y轴
fontdict1 = {"size":13,"color":"k",'family':'Times New Roman'}
ax.set_xlabel("Values", fontdict=fontdict1)
ax.set_ylabel("Different Type Data ", fontdict=fontdict1)

#添加序号
ax.set_title('Box plots for different types data\n',fontsize=15)
text_font = {'family':'Times New Roman','size':'22','weight':'bold','color':'black'}
ax.text(.02,.9,"(a)",transform = ax.transAxes,fontdict=text_font,zorder=4)
ax.text(.8,.056,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 8.5,color='black')
plt.savefig(r'E:\Data_resourses\DataCharm 公众号\Python\学术图表绘制\boxplot_region.png',width=6,height=4,
            dpi=900,bbox_inches='tight')
plt.show()#显示图像

可以看出,在对boxplot进行定制化需求时,也只是对基本的填充颜色线宽线类型异常点的颜色形状透明度等基本设置。具体操作不是很难,可能就是需要设置较多的参数

。结果如下:

注意,这里盒子的填充颜色选择了"灰色系"的颜色进行填充,这对学术图表是比较友好的,具体的颜色系可以参看下图 :

建议大家在绘制学术图表时,多采用红色方框中的色系。(感觉没有ggplot2的grey20,grey30等好记啊

)

04. seaborn 绘制

相对于matplotlib 大量的绘图属性需要设置,python统计绘图库seaborn绘制箱线图代码量则少很多,但要想绘制不同类别数据箱线图,则需对数据添加类别标签,如下:

具体绘制代码如下:

代码语言:javascript
复制
plt.rcParams['font.family'] = ["Times New Roman"]
fig, ax = plt.subplots(figsize=(6,4),dpi=200)
palette = ['dimgray','darkgray']
sns_box = sns.boxplot(x=plot_data['AOD_550nm'],y=plot_data['Type'],hue=plot_data['Type'],
                     palette=palette,dodge=False,width=.4,ax=ax)
#去除图例title
ax.legend(frameon=False).set_title("")
ax.tick_params(left=True,bottom=True,direction='in',labelsize=12)
ax.set_yticklabels([])
ax.set_ylabel("Different Type Data ", fontdict=fontdict1)
ax.set_xlabel("Values",fontdict=fontdict1)
ax.set_title('Box plots for different types data\n',fontsize=15)
ax.text(.02,.9,"(a)",transform = ax.transAxes,fontdict=text_font,zorder=4)
ax.text(.8,.056,'\nVisualization by DataCharm',transform = ax.transAxes,
        ha='center', va='center',fontsize = 8.5,color='black')
plt.savefig(r'E:\Data_resourses\DataCharm 公众号\Python\学术图表绘制\boxplot_sns.png',width=6,height=4,
            dpi=900,bbox_inches='tight')

结果如下:

当然,你还可以通过设置seaborn或matplotlib的主题,绘制不同风格的图表,如下:

在当类别数据较多时,你也可以将箱线图垂直绘制,如下:

05. 总结

本期推文就箱线图(boxplot)进行了matplotlib和seaborn的绘制推文介绍,当然,在添加误差等绘图特征时,可能可R还有一定差距。本人能力有限,如发现错误,后台告知或加群讨论啊

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01. 引言
  • 02. 箱线图基本介绍
  • 03. matplotlib绘制
  • 04. seaborn 绘制
  • 05. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档