技术标签: matlab 画柱状图和误差棒
目标图片效果
想要实现的图片效果
其实上图说白了就是均值加减标准差,上面的线条是用来标示组间比较的。
制图清单
1.工具: R+Rstudio
2.数据准备:需要如下样式的数据。
第一列是分组,第二列是均值,第三列是标准差。
数据格式
3.设置R软件工作目录:
为了方便找到结果的图,可以把工作目录设置为桌面。操作如下:
工作目录设置
4.跑代码:打开Rstudio导入数据运行代码就行了~
将数据文件放在桌面,导入数据,注意数据格式为csv,在括号中按Tab键进行导入。
rm(list=ls())#清除掉全局环境中的文件
data
加载需要用到的R软件包
##########加载需要用的R包
if (!require(ggplot2)) {install.packages("ggplot2")}
if (!require(ggsignif)) {install.packages("ggsignif")}
if (!require(ggsci)) {install.packages("ggsci")}
if (!require(export)) {install.packages("export")}
加载数据,构建绘图函数。(直接运行就行,看不懂也没关系。)
#######载入数据
attach(data)
#构建作图函数
myplot
ggplot(data,aes(eval(parse(text=names(data)[1])),eval(parse(text=names(data)[2])),
fill=factor(eval(parse(text=names(data)[2])))))+
geom_bar(position = "dodge",stat = "identity")+
geom_errorbar(aes(ymin=eval(parse(text=names(data)[2]))-eval(parse(text=names(data)[3])),
ymax=eval(parse(text=names(data)[2]))+eval(parse(text=names(data)[3])),
color=factor(eval(parse(text=names(data)[2])))),position = "dodge",width=0.3,size=2)+
scale_y_continuous(expand = c(0,0))+
labs(x=names(data)[1],y=names(data)[2])+
theme_classic(base_size = 22)+
theme(axis.text.x = element_text(angle = -45,hjust = 0.2),
legend.position = "none")+
scale_fill_lancet()+ #####这里用了lancet杂志的配色方案
scale_color_lancet()
}
出图~
###绘图
myplot(data)
本文示例数据出的图
修改Y轴长度,不需要修改这一步可以跳过。
###将画出来的图赋值方便修改
p
##如果你想改Y轴的范围,可以修改下面“limits=”中的数值
p+scale_y_continuous(limits = c(0,30),expand = c(0,0))+
scale_fill_lancet()+
scale_color_lancet()
接下来就是导出到ppt里,在ppt里就可以直接加上组间对比的线条。
导出的图所几乎所有对象都是可以修改的,可以自己DIY标题,颜色等等~
###导出成ppt自己修改细节
graph2ppt(file="myplot.pptx",width=7,height=5)
ppt中的图
扩展
当然,不用PPT也行,R本身就足够强大,但是需要多了解一点图形语法。
示例图中线条的增加,可以用ggsignif包来实现,当然用ggplot2自带的annotate函数也可以。
###根据本图实际情况的示例代码
p+scale_y_continuous(limits = c(0,40),expand = c(0,0))+
annotate("errorbarh",xmin=1,xmax = 2,y=25,size=1)+
annotate("errorbarh",xmin=1,xmax = 6,y=36,size=1)+
annotate("errorbarh",xmin = 3,xmax=4,y=29,size=1)+
annotate("errorbarh",xmin = 1,xmax=5,y=32,size=1)+
annotate("text",label="*",x=1.5,y=26,fontface="bold",size=5)+
annotate("text",label="*",x=3.5,y=33,size=5,fontface="bold")+
annotate("text",label="ns",x=3.5,y=37.5,size=5,fontface="bold")+
scale_fill_lancet()+
scale_color_lancet()
跑代码出图。
效果图
补充一个实际使用中更常用的方法,借助ggpubr包
library(ggpubr)
#设定比较组
my_comparisons
1:nrow(t(combn(levels(as.factor(data$group)),2))))
#添加对比p值
p+ stat_compare_means(comparisons = my_comparisons, label.y = c(29, 35, 40))+
stat_compare_means(label.y = 45) # Add 全局nova p-value
p值保留小数点问题
#以保留两位小数点为例
p + stat_compare_means(
aes(label = paste0("p = ", round(as.numeric(..p.format..,2))))
)
小结
带误差棒柱状图算是实验类论文中很常用的图形。
实现起来也不难,本文绘图的主函数,在笔者五年前的破烂小电脑里运行出图,耗时如下,快得飞起。
绘图耗时计算
加上载入数据,运行其他代码,还有喝口水的时间,大概需要一分钟吧,可以尝试拷贝代码在自己的电脑运行起来吼~(─‿‿─)
文章浏览阅读386次。ROS常用工具仿真:Gazebo调试、可视化:Rviz、rqt命令行工具:rostopic、rosbag…专用工具:Moveit!Gazebo机器人仿真工具、ODE物理引擎、用于动力学,导航,感知等任务的模拟RVizThe Robot Visualization tool 可视化工具 方便监控和调试把一些抽象的传感器信息以图像的方式传送给我们,便于进行开发和调试rqt可视..._rviz gazebo rqt_bag
文章浏览阅读603次。Java层获取权限:void GetExternalStoragePermission(){ if(!CheckExternalStoragePermission()) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission..._android 获取sd卡权限
文章浏览阅读193次。jQuery的事件方法相比于js代码来说没有太大的区别,最大的区别就去去掉on,以及一些特殊的例子。例如鼠标事件中的hover的使用。hoverhover() 方法可以看做是mouseenter 和 mouseleave两个函数的结合,当只传入一个参数的时候,会在鼠标进入和离开指定元素时都执行参数函数,如果传入两个参数则是在进入指定元素时执行第一个函数,在离开指定元素时执行第二个函数。例如: $( ".div" ).hover( a, b) 当进入指定div标签时执行a函数,当离开指定div标._jquery常用事件
文章浏览阅读7.8k次,点赞10次,收藏24次。这个问题个人也看的不太懂,参考百科上的计算说明,把它转化成相应成代码即可.埃尔米特插值是另一类插值问题,这类插值在给定的节点处,不但要求插值多项式的函数值与被插函数的函数值相同。同时还要求在节点处,插值多项式的一阶直至指定阶的导数值,也与被插函数的相应阶导数值相等,这样的插值称为埃尔米特插值,或称为Hermite插值。 Hermite插值在不同的节点,提出的差值条件个数可以不同,若在某节点xi,要求_hermit插值 c语言
文章浏览阅读8.2k次。这是我第一次尝试设置一些虚拟机。 我正在尝试rdp给他们,但我遇到了这个错误This is my first attempt in setting up some VMs. I am trying to rdp to them but I'm encountering this error**远程桌面无法找到计算机"\[服务器\]"。 这可能意味着"\[服务器\]"。 不属于指定的网络。 验证您尝..._远程桌面无法找到计算机 不属于指定网络
文章浏览阅读8.9k次,点赞9次,收藏24次。idea类存在找不到解决办法996的程序猿 2019-01-09 13:23:07 51954 收藏 101分类专栏: 工具类 文章标签: idea 找不到类 idea 找不到符号版权1.刷新maven项目2.清理idea缓存3.maven clean install4.重新bulid5.如果使用了lombok插件开启之后重新build6.maven依赖冲突导致1.打开当前maven模块或者,父类模块对应的pom,哪个模块有冲突进入那个模块!2.ctlr+alt+shif_idea 找不到类
文章浏览阅读1.2w次。最近在调试一个设备,非常的吵,决定把风扇转速调低,降低噪音。这篇文章可能不具有通用性,仅自己记录,用作以后参考。风扇的转速通过pwm调节,因此先找下有没有pwm模块:ls /sys/class/hwmon/hwmon*/对应路径下找不到pwm的话,说明模块没有加载,需要编译模块,加载后才可以到 https://www.kernel.org/ 下载内核源码windows下通过ssh连接运行linux..._nct6775
文章浏览阅读5.4k次,点赞7次,收藏21次。实验环境:Cisco Packet Tracer Student 6.2.0.0052 全局模式下show run显示如下配置:--------------------------------------------------全局模式---------------------------------------------------------路由器:cisco 2620XM 配置_cisco 实验 单臂路由器配置
文章浏览阅读1.8k次。学习来源:狂神说JavaDocker基本组成原理镜像(image)docker镜像就好比是一个模版,可以通过这个模版创建容器服务,tomcat===》run===〉tomcat01容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就在容器中)。容器(container)Docker利用容器技术,独立运行一个或一组应用,通过镜像来创建。启动,停止,删除等基本命令,目前可以将这个容器理解为一个简易的Linux。仓库(repository)仓库就是存放镜像的地方。_when using add with more than one source file, the destination must be a dir
文章浏览阅读2w次,点赞47次,收藏224次。AD20内电层电源分割实例。我们通常会在 元件布局合理,且不影响其他信号线走线的情况下。将大电流的电源放在 Top、Bottom层,使用多边形铺铜进行电源分割。而内电层的电源分割操作方法与 Top、Bottom层不同(内电层不能使用多边形铺铜)。这里有一个实例,借由实例的操作来讲述AD20的 内电层电源分割 方式。AD20内电层的电源分割实例图中标记的网络 VIN,受限于元件及布局的遮挡,不容易从Top层进行铺铜连线。于是打算通过第3层 -PWR层 ,用电源分割的方式实现网络连接。1_内电层分割
文章浏览阅读1.2k次。1 前言年初做了一款Android TV 应用,用到了MQTT。主要实现的是类似一些景区利用大屏幕实时显示景点人数,超过人数就不允许进入。即利用闸机设备监控到进景区的游客,然后通过MQTT将消息发送给大屏幕,最后大屏幕实时显示景区人数,并响应一个消息通知闸机设备已经收到了它发过来的消息(确保消息到达)。这篇文章会模拟真实的使用流程进行讲解,即闸机发布消息——服务器(代理)收到消息转发给大屏幕—..._github android tv 推送消息
文章浏览阅读1.9k次,点赞3次,收藏17次。hive-third-functions参考文献:https://github.com/aaronshan/hive-third-functions/blob/master/README-zh.md简介hive-third-functions 包含了一些很有用的hive udf函数,特别是数组和json函数.注意:hive-third-functions支持hive-0.11.0或更高..._hive array_distinct