ggplot2绘制误差棒及显著性标记

本文转载自https://blog.csdn.net/weixin_34279246/article/details/87152290

绘制带有误差棒的条形图


   
   
   
   
  1. library(ggplot2)
  2. # 创建数据集
  3. df <- data.frame(treatment = factor(c( 1, 1, 1, 2, 2, 2, 3, 3, 3)),
  4. response = c( 2, 5, 4, 6, 9, 7, 3, 5, 8),
  5. group = factor(c( 1, 2, 3, 1, 2, 3, 1, 2, 3)),
  6. se = c( 0.4, 0.2, 0.4, 0.5, 0.3, 0.2, 0.4, 0.6, 0.7))
  7. head(df) #查看数据集
  8. ## treatment response group se
  9. ## 1 1 2 1 0.4
  10. ## 2 1 5 2 0.2
  11. ## 3 1 4 3 0.4
  12. ## 4 2 6 1 0.5
  13. ## 5 2 9 2 0.3
  14. ## 6 2 7 3 0.2

   
   
   
   
  1. # 使用geom_errorbar()绘制带有误差棒的条形图
  2. # 这里一定要注意position要与`geom_bar()`保持一致,由于系统默认dodge是0.9,
  3. # 因此geom_errorbar()里面position需要设置0.9,width设置误差棒的大小
  4. ggplot(data = df, aes( x = treatment, y = response, fill = group)) +
  5. geom_bar( stat = "identity", position = "dodge") +
  6. geom_errorbar(aes(ymax = response + se, ymin = response - se),
  7. position = position_dodge( 0. 9), width = 0. 15) +
  8. scale_fill_brewer(palette = "Set1")
ggplot2绘制误差棒及显著性标记_第1张图片

绘制带有显著性标记的条形图


   
   
   
   
  1. label <- c( "", "*", "**", "", "**", "*", "", "", "*") #这里随便设置的显著性,还有abcdef等显著性标记符号,原理一样,这里不再重复。
  2. # 添加显著性标记跟上次讲的添加数据标签是一样的,这里我们假设1是对照
  3. ggplot(data = df, aes(x = treatment, y = response, fill = group)) +
  4. geom_bar(stat = "identity", position = "dodge") +
  5. geom_errorbar(aes(ymax = response + se, ymin = response - se),
  6. position = position_dodge( 0.9), width = 0.15) +
  7. geom_text(aes(y = response + 1.5 * se, label = label, group = group),
  8. position = position_dodge( 0.9), size = 5, fontface = "bold") +
  9. scale_fill_brewer(palette = "Set1") #这里的label就是刚才设置的,group是数据集中的,fontface设置字体。
ggplot2绘制误差棒及显著性标记_第2张图片

绘制两条形图中间带有星号的统计图


   
   
   
   
  1. #创建一个简单的数据集
  2. Control <- c(2.0,2.5,2.2,2.4,2.1)
  3. Treatment <- c(3.0,3.3,3.1,3.2,3.2)
  4. mean <- c(mean(Control), mean(Treatment))
  5. sd <- c(sd(Control), sd(Treatment))
  6. df1 <- data.frame(V=c("Control", "Treatment"), mean=mean, sd=sd)
  7. df1$V <- factor(df1$V, levels=c("Control", "Treatment"))
  8. #利用geom_segment()绘制图形
  9. ggplot(data=df1, aes(x=V, y=mean, fill=V))+
  10. geom_bar(stat = "identity",position = position_dodge(0.9),color="black")+
  11. geom_errorbar(aes(ymax=mean+sd, ymin=mean-sd), width=0.05)+
  12. geom_segment(aes(x=1, y=2.5, xend=1, yend=3.8))+#绘制control端的竖线
  13. geom_segment(aes(x=2, y=3.3, xend=2, yend=3.8))+#绘制treatment端竖线
  14. geom_segment(aes(x=1, y=3.8, xend=1.45, yend=3.8))+
  15. geom_segment(aes(x=1.55, y=3.8, xend=2, yend=3.8))+#绘制两段横线
  16. annotate("text", x=1.5, y=3.8, label="〇", size=5)#annotate函数也可以添加标签
ggplot2绘制误差棒及显著性标记_第3张图片

为图形添加标题

图形标题有图标题、坐标轴标题、图例标题等


   
   
   
   
  1. p <- ggplot(data = df, aes(x = treatment, y = response, fill = group)) +
  2. geom_bar( stat = "identity", position = "dodge") +
  3. geom_errorbar( aes( ymax = response + se, ymin = response - se),
  4. position = position_dodge(0.9), width = 0.15) +
  5. scale_fill_brewer( palette = "Set1")# 利用 ggtitle()添加图标题,还有 labs()也可以添加标题,最后会提一下。(有一个问题就是 ggtitle()添加的标题总是左对齐)
  6. p + ggtitle("利用 ggtitle()添加图标题")
ggplot2绘制误差棒及显著性标记_第4张图片

   
   
   
   
  1. # 利用xlab()\ylab()添加/修改坐标轴标题
  2. p + ggtitle( "利用ggtitle()添加图标题") +
  3. xlab( "不同处理") +
  4. ylab( "response") #标题的参数修改在theme里,theme是一个很大的函数,几乎可以定义一切,下次有时间会讲解

ggplot2绘制误差棒及显著性标记_第5张图片

最后再讲解一下如何将多副图至于一个页面 利用包 gridExtragrid.arrange()函数实现


   
   
   
   
  1. # 将四幅图放置于一个页面中
  2. p <- ggplot(data = df, aes(x = treatment, y = response, fill = group)) +
  3. geom_bar( stat = "identity", position = "dodge") +
  4. geom_errorbar( aes( ymax = response + se, ymin = response - se),
  5. position = position_dodge(0.9), width = 0.15) +
  6. scale_fill_brewer( palette = "Set1")
  7. p1 < - p + ggtitle("利用 ggtitle()添加图标题")
  8. p2 < - p + ggtitle("利用 ggtitle()添加图标题") + xlab("不同处理") + ylab(" response")
  9. p3 < - ggplot( data = df, aes( x = treatment, y = response, fill = group)) +
  10. geom_bar( stat = "identity", position = "dodge") +
  11. geom_errorbar( aes( ymax = response + se, ymin = response - se),
  12. position = position_dodge(0.9), width = 0.15) +
  13. geom_text( aes( y = response + 1.5 * se, label = label, group = group),
  14. position = position_dodge(0.9), size = 5, fontface = "bold") +
  15. scale_fill_brewer( palette = "Set1")
  16. library( gridExtra) #没有安装此包先用 install.packages(' gridExtra')安装
  17. grid.arrange( p, p1, p2, p3)
ggplot2绘制误差棒及显著性标记_第6张图片

上次有人问坐标轴旋转的实现,坐标轴旋转有时是很有用的,下面是我看过的一个例子,用来介绍一下。


   
   
   
   
  1. #先加载他的数据
  2. url.world_ports <- url( "http://sharpsightlabs.com/wp-content/datasets/world_ports.RData")
  3. load(url.world_ports)
  4. knitr::kable(df.world_ports[ 1: 5,]) #该数据是关于世界上各个港口的数据汇总
ggplot2绘制误差棒及显著性标记_第7张图片

   
   
   
   
  1. library(dplyr) #用于数据操作,与ggplot2一样是R语言必学包#现在绘制条形图(%>%上次说过是管道操作,用于连接各个代码,十分有用)
  2. df.world_ports%>%filter(year== 2014)%>% #筛选2014年的数据
  3. ggplot(aes( x=reorder(port_label, desc(volume)), y=volume))+
  4. geom_bar( stat = "identity", fill= "darkred")+
  5. labs(title= "Busiest container ports in the world")+
  6. labs(subtitle = '2014, in order of shipping volume')+ #添加副标题
  7. labs( x = "Port", y = "Shipping\nVolume")+
  8. theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = . 4)) #调整x轴标签,angle=90表示标签旋转90度,从图中可以看出
ggplot2绘制误差棒及显著性标记_第8张图片

   
   
   
   
  1. #现在旋转坐标轴,并筛选排名小于25的港口,并且添加数据标签
  2. df.world_ports %>% filter(year== 2014, rank<= 25) %>% #筛选2014年并且rank小于等于25的数据
  3. ggplot(aes( x=reorder(port, volume), y=volume))+
  4. geom_bar( stat = "identity", fill= "darkred")+
  5. labs(title= "Busiest container ports in the world")+
  6. labs(subtitle = '2014, in order of shipping volume')+
  7. labs( x = "Port", y = "Shipping\nVolume")+
  8. geom_text(aes(label=volume), hjust= 1.2, color= "white")+
  9. coord_flip() #旋转坐标轴
ggplot2绘制误差棒及显著性标记_第9张图片

两图相比,明显第二幅图好,一是可以添加数据标签,二是不用歪着脖子看。
本来打算讲讲图例的但是发现内容太多了,就不讲了,下次吧!

你可能感兴趣的:(R语言)