首页 > 解决方案 > 如何用 sd 并排制作发散条形图

问题描述

我想用平均值绘制一个发散的条形图,但这种数据必须根据用户呈现 sd 值或错误。我建立了这个图,但我的最终版本对我不利,因为误差线位于图的两侧,我想从每个条的顶部看到。

library(ggplot2) 
Id<-c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)

average<-c(0.0747063211,-0.3095312554,-0.1676168596,0.0345693610,0.0637163317,
0.0538690955,-0.0339503837,0.4604416085,0.1488818055,0.1428970602,0.0410909991,
0.0778945537,-0.1594907397,0.1513291891,0.0037414966,0.0913500229)

Sd<-c(0.62552306,0.59959591,0.86200475,0.42053361,0.46307827,
0.18033971,0.62732196,0.78281589,0.40394317,0.47922559,0.35821862,
0.41568533,0.62758344,0.47396960,0.01449075,1.15802890)

Final<-c(TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE)

Fdata<-data.frame(Id,average,Sd,Final)

ggplot(Fdata,aes(x=reorder(Id, average), y=average, fill=Final))+
geom_bar(stat="identity") + coord_flip()+ theme(text= element_text(size=10,family="Times New Roman", color="black"))+ xlab("id")+ylab("var")+ theme(panel.background= element_blank(),panel.grid.major=element_blank(),
    panel.grid.minor = element_blank())+ guides(fill=FALSE)+ geom_errorbar(aes(ymin=average-Sd, ymax=average+Sd), width=0.7) 

标签: rdataframeggplot2bar-chartvisualization

解决方案


使用以下代码

library(ggplot2) 
Id<-c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)

average<-c(0.0747063211,-0.3095312554,-0.1676168596,0.0345693610,0.0637163317,
           0.0538690955,-0.0339503837,0.4604416085,0.1488818055,0.1428970602,0.0410909991,
           0.0778945537,-0.1594907397,0.1513291891,0.0037414966,0.0913500229)

Sd<-c(0.62552306,0.59959591,0.86200475,0.42053361,0.46307827,
      0.18033971,0.62732196,0.78281589,0.40394317,0.47922559,0.35821862,
      0.41568533,0.62758344,0.47396960,0.01449075,1.15802890)

Final<-c(TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE)

Fdata<-data.frame(Id, average, Sd, Final)

limits <- aes(
  ymax = Fdata$average + (Fdata$average > 0)*Fdata$Sd,  
  ymin = Fdata$average - (Fdata$average < 0)*Fdata$Sd)

ggplot(Fdata, aes(x=reorder(Id, average), y=average, fill=Final))+
  geom_bar(stat="identity", color = "black") + coord_flip()+ 
  theme(text= element_text(size=10,family="Times New Roman", color="black"))+ 
  xlab("id")+ ylab("var")+ 
  theme(panel.background= element_blank(),panel.grid.major=element_blank(),
  panel.grid.minor = element_blank()) + guides(fill=FALSE) + 
  geom_errorbar(limits, width=0.7) 

在此处输入图像描述

这是你想要的吗?


推荐阅读