ggplot并排geom_bar()

Hou*_*und 17 r ggplot2

我想使用此数据框的geom_bar()创建一个并排的条形图,

> dfp1
   value   percent1   percent
1 (18,29] 0.20909091 0.4545455
2 (29,40] 0.23478261 0.5431034
3 (40,51] 0.15492958 0.3661972
4 (51,62] 0.10119048 0.1726190
5 (62,95] 0.05660377 0.1194969
Run Code Online (Sandbox Code Playgroud)

使用x轴上的值和百分比作为并排条形图.我试过用这个代码,

p = ggplot(dfp1, aes(x = value, y= c(percent, percent1)), xlab="Age Group")
p = p + geom_bar(stat="identity", width=.5)  
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:错误:美学必须是长度为1或与dataProblems:value相同的长度.我的百分比和百分比1与值的长度相同,所以我很困惑.谢谢您的帮助.

Dav*_*urg 29

您将首先需要melt您的数据value.它将创建另一个value默认调用的变量,因此您需要重命名它(我称之为percent).然后,使用绘制新数据集fill以将数据分成组,并按position = "dodge"顺序放置条形(而不是相互叠加)

library(reshape2)
library(ggplot2)
dfp1 <- melt(dfp1)
names(dfp1)[3] <- "percent"
ggplot(dfp1, aes(x = value, y= percent, fill = variable), xlab="Age Group") +
   geom_bar(stat="identity", width=.5, position = "dodge")  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 如何将 geom_text(aes(x=, y=, label=mylabels) 选项与闪避条一起使用,以便在每个条上获得一个居中的标签? (2认同)

sbh*_*bha 6

与 David 的答案类似,这里有一个 tidyverse 选项,用于tidyr::pivot_longer在绘图之前重塑数据:

library(tidyverse)

dfp1 %>% 
  pivot_longer(-value, names_to = "variable", values_to = "percent") %>% 
  ggplot(aes(x = value, y = percent, fill = variable), xlab="Age Group") + 
  geom_bar(stat = "identity", position = "dodge", width = 0.5)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述