繁体   English   中英

如何叠加两个geom_bar?

[英]How to overlay two geom_bar?

我试图叠加 2 个来自geom_bar的条形图,这些geom_bar源自 2 个单独的 data.frames。

dEQ
   lab perc
1  lmP 55.9
2  lmN 21.8
3   Nt  0.6
4 expG  5.6
5 expD  0.0
6 prbN 11.2
7 prbP  5.0

LMD
   lab perc
1  lmP 16.8
2  lmN  8.9
3   Nt  0.0
4 expG  0.0
5 expD  0.0
6 prbN  0.0
7 prbP  0.0

第一个情节是:

p <- ggplot(dEQ, aes(lab, perc)) + 
     xlab(xlabel) + ylab(ylabel) +
     geom_bar(stat="identity", colour="blue", fill="darkblue")  + 
     geom_text(aes(vecX, vecYEQ+1.5, label=vecYlbEQ), data=dEQ, size=8.5)  + 
     theme_bw() +
     opts(axis.text.x = theme_text(size = 20, face = "bold", colour = "black")) +
     opts(axis.text.y = theme_text(size = 20, face = "bold", colour = "black")) +
     coord_flip() + 
     scale_y_continuous(breaks=c(0,10,20,30,40,50,60),
                        labels=c("0","","20","","40","","60"), 
                        limits = c(0, 64), expand = c(0,0))
print(p)

但我想与 data.frame LMD另一个geom_bar重叠绘制

ggplot(LMD, aes(lab, perc)) + 
    geom_bar(stat="identity", colour="blue", fill="red", add=T)

我想要一个传奇。

这是一个例子:

p <- ggplot(NULL, aes(lab, perc)) + 
  geom_bar(aes(fill = "dEQ"), data = dEQ, alpha = 0.5) +
  geom_bar(aes(fill = "LMD"), data = LMD, alpha = 0.5)
p

在此处输入图片说明

但我建议rbind它们并通过躲避来绘制它:

dEQ$name <- "dEQ"
LMD$name <- "LMD"
d <- rbind(dEQ, LMD)
p <- ggplot(d, aes(lab, perc, fill = name)) + geom_bar(position = "dodge")

在此处输入图片说明

尽管答案不是 OP 的直接要求,但由于此问题与 SO 上的许多后续问题相关联,这些问题已通过提供此问题的链接而关闭,因此我提出了一种用于bar(s) within bar plot构造方法中bar(s) within bar plot方法在 ggplot2 中。

一个更大的条形图中的两个条形(分组划分)的示例。

library(tidyverse)
set.seed(40)
df <- data_frame(name = LETTERS[1:10], provision = rnorm(mean = 100, sd = 20, n = 10),
                expenditure = provision - rnorm(mean = 25, sd = 10, n = 10))

df %>% mutate(savings = provision - expenditure) %>%
  pivot_longer(cols = c("expenditure", "savings"), names_to = "Exp", values_to = "val") %>%
  ggplot() + geom_bar(aes(x= name, y = provision/2), stat = "identity", fill = "blue", width = 0.9, alpha = 0.3) +
  geom_col(aes(x=name,y=val, fill = Exp), position ="dodge", width = 0.7) +
  scale_y_continuous(name = "Amount in \u20b9")

在此处输入图片说明

暂无
暂无

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

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