繁体   English   中英

geom_bar中的动态数据标签

[英]Dynamic data labels in geom_bar

我正在使用ggplot2 geom_bar制作一系列条形图。 每个城市都有三个数据点,我正在为每个城市绘制图表。 我想将每个图表中的第二个和第三个条形标记为上一个条形的百分比(例如,看起来像5、4、3的数据将显示为5、80%,75%)。

在此数据中,我的价值应该是所有图形中条1的标签。 dum2 / dum1 * 100应该是带有dum2值的条形标签。 dum3 / dum2 * 100应该是值为dum3的条的标签。

State <- c("AA","AB","AC","AD","AE")
dum1 <- c(34, 30, 8, 22, 5)
dum2 <- c(22.5, 28.1, 3, 12, 1)
dum3 <- c(12.8, 23, 2.8, 11.9, 0.3)
df <- data.frame(State, dum1, dum2, dum3)
m1 <-melt(df)

for(i in levels(m1$State)) 
p <- ggplot(subset(m1, State==i), aes(variable, value,  fill = variable)) +
facet_wrap(~ State) + 
geom_bar(stat="identity", show_guide=FALSE) + 
geom_text(aes(x=variable, y=value + 2, label=round(value,digits=0)), vjust=0,
        size=30) +
theme(axis.title.x = element_blank(),
    plot.background = element_rect(fill = "transparent", color=NA),
    panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
    panel.border = element_blank(), panel.background = element_blank(),
    axis.line = element_blank(), axis.title.y=element_blank(),
    axis.line = element_blank(), 
    axis.text.x = element_blank(), 
    axis.text.y = element_blank(),
    axis.ticks = element_blank(), 
    axis.title.y = element_blank(),
    strip.text.x = element_blank(),
    strip.background = element_rect(fill="transparent")
     ) +
     scale_y_continuous(limits=c(0,40)) +
    scale_fill_manual(values=c("navy", "coral", "gold")) +
  ggsave(sprintf("plot %s.jpg", i))

我尝试添加一列,其中包含相关行的计算百分比,但不知道如何仅为图形上的选定数据点调用列。 我用过类似的东西

lab<-c(0,0,0,0,0,66.2,93.7,37.5,54.5,20.0,56.9,81.9,93.3,99.2,30.0)

但无法弄清楚如何正确调用它。

没有所有多余的格式,这似乎可以满足您的要求:

ggplot(subset(m1, State=="AA"), aes(variable, value,  fill = variable)) +
  facet_wrap(~ State) + 
  geom_bar(stat="identity", show_guide=FALSE) + 
  geom_text(aes(x=variable, y=value + 2, 
                label=paste0(round(value/c(1,0.01*head(value,-1))),c("","%","%"))))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM