matlab 画柱状图和误差棒,小白1分钟绘图:带误差棒的柱状图-程序员宅基地

技术标签: matlab 画柱状图和误差棒  

目标图片效果

e81506c31aac

想要实现的图片效果

其实上图说白了就是均值加减标准差,上面的线条是用来标示组间比较的。

制图清单

1.工具: R+Rstudio

2.数据准备:需要如下样式的数据。

第一列是分组,第二列是均值,第三列是标准差。

e81506c31aac

数据格式

3.设置R软件工作目录:

为了方便找到结果的图,可以把工作目录设置为桌面。操作如下:

e81506c31aac

工作目录设置

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)

e81506c31aac

本文示例数据出的图

修改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)

e81506c31aac

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()

跑代码出图。

e81506c31aac

效果图

补充一个实际使用中更常用的方法,借助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))))

)

小结

带误差棒柱状图算是实验类论文中很常用的图形。

实现起来也不难,本文绘图的主函数,在笔者五年前的破烂小电脑里运行出图,耗时如下,快得飞起。

e81506c31aac

绘图耗时计算

加上载入数据,运行其他代码,还有喝口水的时间,大概需要一分钟吧,可以尝试拷贝代码在自己的电脑运行起来吼~(─‿‿─)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39759600/article/details/115850219

智能推荐

ros入门教程(五)-- 常用工具_rviz gazebo rqt_bag-程序员宅基地

文章浏览阅读386次。ROS常用工具仿真:Gazebo调试、可视化:Rviz、rqt命令行工具:rostopic、rosbag…专用工具:Moveit!Gazebo机器人仿真工具、ODE物理引擎、用于动力学,导航,感知等任务的模拟RVizThe Robot Visualization tool 可视化工具 方便监控和调试把一些抽象的传感器信息以图像的方式传送给我们,便于进行开发和调试rqt可视..._rviz gazebo rqt_bag

android 获取SD 卡权限_android 获取sd卡权限-程序员宅基地

文章浏览阅读603次。Java层获取权限:void GetExternalStoragePermission(){ if(!CheckExternalStoragePermission()) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission..._android 获取sd卡权限

jQuery常用事件方法整理-程序员宅基地

文章浏览阅读193次。jQuery的事件方法相比于js代码来说没有太大的区别,最大的区别就去去掉on,以及一些特殊的例子。例如鼠标事件中的hover的使用。hoverhover() 方法可以看做是mouseenter 和 mouseleave两个函数的结合,当只传入一个参数的时候,会在鼠标进入和离开指定元素时都执行参数函数,如果传入两个参数则是在进入指定元素时执行第一个函数,在离开指定元素时执行第二个函数。例如: $( ".div" ).hover( a, b) 当进入指定div标签时执行a函数,当离开指定div标._jquery常用事件

数值作业:Hermite插值法之C语言实现代码_hermit插值 c语言-程序员宅基地

文章浏览阅读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**远程桌面无法找到计算机"\[服务器\]"。 这可能意味着"\[服务器\]"。 不属于指定的网络。 验证您尝..._远程桌面无法找到计算机 不属于指定网络

idea类存在找不到解决办法_idea 找不到类-程序员宅基地

文章浏览阅读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 找不到类

随便推点

【开发日常】Linux下设置机箱上的风扇转速_nct6775-程序员宅基地

文章浏览阅读1.2w次。最近在调试一个设备,非常的吵,决定把风扇转速调低,降低噪音。这篇文章可能不具有通用性,仅自己记录,用作以后参考。风扇的转速通过pwm调节,因此先找下有没有pwm模块:ls /sys/class/hwmon/hwmon*/对应路径下找不到pwm的话,说明模块没有加载,需要编译模块,加载后才可以到 https://www.kernel.org/ 下载内核源码windows下通过ssh连接运行linux..._nct6775

思科模拟器上完成单臂路由配置的试验纪实_cisco 实验 单臂路由器配置-程序员宅基地

文章浏览阅读5.4k次,点赞7次,收藏21次。实验环境:Cisco Packet Tracer Student 6.2.0.0052 全局模式下show run显示如下配置:--------------------------------------------------全局模式---------------------------------------------------------路由器:cisco 2620XM 配置_cisco 实验 单臂路由器配置

Docker学习笔记_when using add with more than one source file, the-程序员宅基地

文章浏览阅读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

Altium AD20电源分割的方法,AD内电层的电源分割,AD电源层电源分割_内电层分割-程序员宅基地

文章浏览阅读2w次,点赞47次,收藏224次。AD20内电层电源分割实例。我们通常会在 元件布局合理,且不影响其他信号线走线的情况下。将大电流的电源放在 Top、Bottom层,使用多边形铺铜进行电源分割。而内电层的电源分割操作方法与 Top、Bottom层不同(内电层不能使用多边形铺铜)。这里有一个实例,借由实例的操作来讲述AD20的 内电层电源分割 方式。AD20内电层的电源分割实例图中标记的网络 VIN,受限于元件及布局的遮挡,不容易从Top层进行铺铜连线。于是打算通过第3层 -PWR层 ,用电源分割的方式实现网络连接。1_内电层分割

Android消息推送MQTT实战_github android tv 推送消息-程序员宅基地

文章浏览阅读1.2k次。1 前言年初做了一款Android TV 应用,用到了MQTT。主要实现的是类似一些景区利用大屏幕实时显示景点人数,超过人数就不允许进入。即利用闸机设备监控到进景区的游客,然后通过MQTT将消息发送给大屏幕,最后大屏幕实时显示景区人数,并响应一个消息通知闸机设备已经收到了它发过来的消息(确保消息到达)。这篇文章会模拟真实的使用流程进行讲解,即闸机发布消息——服务器(代理)收到消息转发给大屏幕—..._github android tv 推送消息

json、数组、map相关的hive函数_hive array_distinct-程序员宅基地

文章浏览阅读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