生信分析中,画箱线图是常见的需求。最早图简单用seaborn画箱线图。最近下定决心学matplotlib了,所以还是给出matplotlib版本的尝试,但是部分用法还是稚嫩,可能用了笨办法,欢迎大家指正。

箱线图的定义和含义这里就略过了。
前期数据处理部分也略过,画3张子图,3个DataFrame形式如下表所示,表中数据为AF(等位基因频率)。由于两组样本数不统一,所以有缺省项,但这并不影响箱线图绘制。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt#导入matplotlib
from scipy import stats#用来计算非参数检验P_valuefig=plt.figure(figsize=(20,10))#初始化图片
i=1 #该变量用来迭代3图片,每次for循环会+1
d={1:'fig1',2:'fig2',3:'fig3'} #3张子图的名字
for df in [fig1_data,fig2_data,fig3_data]:#对三个df进行循环ax=fig.add_subplot(1,3,i)#一共一排,一排三张图,目前是第i张。pvalue=stats.mannwhitneyu(df['new'],df['old'],alternative='two-sided')[1] #对新旧数据进行非参数检验-秩和检验,得空写写mannwhitneyu和Wilcoxon的区别。#首先df['old']或者df['new']取到某列array,然后dropna()去除该array中的空值。labels是横轴上每个小箱的标签。widths是箱宽。patch_artist为是否填充箱体的颜色,如不要默认设置,想自己设置,则该项选True。boxprops定义box的参数。flierprops定义离群值的参数。medianprops定义中位线的参数。plt.boxplot([df['old'].dropna(),df['new'].dropna()],labels=['old','new'],widths=0.3,patch_artist=True,boxprops={'color':'black','facecolor':'lightgrey'},flierprops={'marker':'+','markerfacecolor':'black','color':'lightgrey'},medianprops={"linestyle":'-','color':'black'})plt.title(d[i],fontsize=30)#通过d字典索引titleplt.xticks(fontsize=20)#定义X轴标签字体大小plt.yticks(fontsize=15)if i==1:ax.set_ylabel('AF',fontsize=30)#为所有的子图定义同一个Y轴标签,我猜测会有更聪明的办法,目前就这。i+=1 #本次循环不会再用到i的,所以增加1。#以下为添加非参数检验的结果y_max=df.max().max()#计算df中最大值,第一次max得出两列各自的最大值,也就是2个值。第二次max从刚2个值中再择出最大值。则可以得到全df的最大值。本步骤的目的是确保添加的文本在最大值的上方,不要和图片重叠了。y_min=df.min().min()#计算df中的最小值,本步骤的目的在下面可以看到。#df最大值-df最小值,得到图片的纵向范围,然后尝试一个合适的比例,去放置文本。这里选择的比例是10,即添加的文本的位置是在y_max上方,再加整图纵向范围的十分之一长度的位置。这是多次尝试的结果。当然也可以使用绝对距离,直接y_max加某数即可。不能直接使用y_max,不然会和箱线图重叠。
#这里plt.plot()里面的值,含义是position,即画出一条[x1=1,x2=2][y1=[y_max+(y_max-y_min)/10,y2=y_max+(y_max-y_min)/10]的线。发现了吗,y1=y2,所以它其实就是一条平行于x轴的横线。plt.plot([1,2], [y_max+(y_max-y_min)/10,y_max+(y_max-y_min)/10], linewidth=1, color='k')
#再画两条纵线plt.plot([1,1], [y_max+(y_max-y_min)/10,y_max+(y_max-y_min)/10-(y_max-y_min)/20], linewidth=1, color='k') plt.plot([2,2], [y_max+(y_max-y_min)/10,y_max+(y_max-y_min)/10-(y_max-y_min)/20], linewidth=1, color='k')
#在横向上方中间的位置加上p值。中间的位置需要自己找,毕竟fontsize、p值小数点后位数,都会影响其位置。plt.text(1.30,y_max+(y_max-y_min)/9,f'P={round(pvalue,4)}',fontsize=15,color='blue')
#为全图加上title
fig.suptitle('My boxline plot',fontsize=35)#保存图片,dpi可以增加清晰度。
plt.savefig('my_boxline.jpg',dpi=500) 

图里的结果可见,fig1_data、fig2_data的新旧数据均差异显著,而fig3_data两组数据之间没有相关性(P>0.05)。

matplotlib画箱线图,添加非参数检验-秩和检验的结果相关推荐

  1. 【数据处理】python matplotlib 画箱线图;箱线图介绍;如何画箱线图

    一.箱线图介绍 假设一组数据有n个数,将它们从小到大排列,分为四等分.位于第25%(n+1)位置的数字是第一四分位数Q1.位于第50%(n+1)位置的数字是第二四分位数Q2,也是中位数.位于第75%( ...

  2. 箱线图入门,一文看懂箱线图,matplotlib画箱线图

    什么是箱线图? 我们画箱线图的目的其实是去查看数据分布的离散程度. 上图将箱线图的重要部分都标出来了.对于箱线图来说,图中会有的要素有: 最大值 Q3(大于75%数据的位点) 中位数 Q1(大于25% ...

  3. Matplotlib学习---用matplotlib画箱线图(boxplot)

    箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...

  4. 画箱线图_箱线图的N种画法

    图中标示了箱线图中每条线和点表示的含义,其中应用到了分位数的概念 线的主要包含五个数据节点,将一组数据从大到小排列,分别计算出他的上边缘(Maximum),上四分位数(Q3),中位数(Median), ...

  5. Matlab(2018b)画箱线图技巧

    Matlab 箱线图并美化 目的:用matlab 画线箱图,并美化.以及x标签过长,如何分两行展示的问题 步骤: 先画箱线图,借助matlab的boxplot函数 x = randn(5); boxp ...

  6. MATLAB boxplot 修改箱子线型、设置箱子颜色、不同长度数据画箱线图、中位线改成黑色、箱线图虚线改实线

    效果图:1.train和test样本数据数量不一样:2.上下端横线去掉,中心线变为实线:3.分组修改颜色:4.指定每个箱子.每个组的位置 网上介绍 boxplot的文章已经很多了,自己试了一天总结出来 ...

  7. R语言箱线图添加显著性--不同水平实现方法

    本节,介绍一下箱线图实现显著性添加的方法,类似这种: 单因素二水平T检验箱线图可视化 单因素三水平T检验箱线图可视化 单因素三水平柱形图 单因素三水平折线图 二因素柱形图 二因素折线图 1. 单因素二 ...

  8. matlab怎么画箱线图群,[转载]Matlab如何画箱线图群组

    data = rand(20,24) month = repmat({'jan' 'feb' 'mar' 'apr' 'may' 'jun' 'jul' 'aug' 'sep' 'oct' 'nov' ...

  9. matlab能给图像编组么,Matlab如何画箱线图群组

    data = rand(20,24) month = repmat({'jan' 'feb' 'mar' 'apr' 'may' 'jun' 'jul' 'aug' 'sep' 'oct' 'nov' ...

  10. r语言echarts画箱线图_R语言学习 - 箱线图(小提琴图、抖动图、区域散点图)

    箱线图 箱线图是能同时反映数据统计量和整体分布,又很漂亮的展示图.在2014年的Nature Method上有2篇Correspondence论述了使用箱线图的好处和一个在线绘制箱线图的工具.就这样都 ...

最新文章

  1. 简单的石头剪刀布(机器胜率略高)
  2. idea包名呈现层级显示
  3. windows环境下Oracle数据库冷备份和恢复
  4. 关于数据可视化的思考小结
  5. classpath*: 和classpath:有什么区别_我们可以从Java“HelloWorld”中学到什么?
  6. 70%以上程序员,不懂数据结构和算法!
  7. Android Input子系统-含实例源码
  8. 连点器安卓手机版_鼠大侠手机版下载-鼠大侠鼠标连点器手机版下载 v1.4 安卓版...
  9. java服务器端分页_使用数据表的服务器端分页
  10. 《Total Commander:万能文件管理器》——第9.6节.后记
  11. Photoshop CS2序列号大全 官方免费密钥
  12. 数据结构C语言严蔚敏版(第二版)超详细笔记附带课后习题
  13. 三星android驱动程序错误,android系统的三星手机插入电脑无法识别
  14. PyS60开发环境搭建
  15. 【ArcGIS风暴】气象台站气温(降水)矢量数据插值成栅格气温(降水)空间数据
  16. C++中的指针类型与构造函数,析构函数
  17. UVALive 6198 A Terribly Grimm Problem
  18. 什么是php-fpm
  19. php 并列排名,MySQL并列排名和顺序排名查询
  20. K8S调用GPU资源配置指南

热门文章

  1. 闲聊可穿戴设备 - shawn.xie
  2. java中的extends与implement
  3. 蚂蚁金服入职考试_我是如何拿到蚂蚁金服实习 offer 的
  4. 集群通信组件tribes之使用方法
  5. 一款基于Zigbee技术的智慧鱼塘系统研究与设计
  6. 对 “悟空拼音”学习软件的教学过程优化分析
  7. 搜狗站长工具【post请求模拟登录】代码分享总结【批量提交搜狗收录网址】
  8. Web网页设计规范详细介绍
  9. Splunk CIM
  10. 偷用计算机作文,【实用】《偷着》作文500字4篇