如何从具有相同格式的不同数据框制作一个条形图?

时间:2016-07-18 16:01:38

标签: r ggplot2 bar-chart

我有三个不同的数据帧具有相同的格式,我无法将它们组合在一起,因为每个数据帧代表不同的数据源。我想在一个条形图中显示不同数据框的一个变量的百分比。

我可以使用以下方法获取一个数据帧的第1列的条形图:

  ggplot(baseline, aes(x = c1)) +
  geom_bar(aes(y = (..count..)/sum(..count..)),fill="blue",colour="blue") +
  geom_text(aes(y = ((..count..)/sum(..count..)), label=scales::percent((..count..)/sum(..count..))), stat = "count")

我希望输出类似于此图(除了我显示每个类别的百分比),而race将是不同数据帧的名称,factor是数据帧第1列的值。

enter image description here

1 个答案:

答案 0 :(得分:1)

我不使用ggplot2,但这里是如何完成你想要的事情的例证。最简单的方法是在data.frames中添加一列来指示每个data.frame的来源。然后按来源计算您想要的任何指标,然后绘制。或者,您可以先计算指标,然后合并data.frames。

library(RColorBrewer)
library(data.table)
set.seed(1234)
make_data <- function() {
  n <- sample(5:10, 1)
  data.frame(id = rep(c("A", "B", "C"), each = n),
             vals = c(rnorm(n, 5, 1), rnorm(n, 10, 1), rnorm(n, 15, 1)))
}
df1 <- make_data()
df2 <- make_data()
df3 <- make_data()
df4 <- make_data()

df1$src <- "source1"
df2$src <- "source2"
df3$src <- "source3"
df4$src <- "source4"

dat <- do.call(rbind, list(df1, df2, df3, df4))
dat <- as.data.table(dat)
res <- dat[ , mean(vals), by  = list(id, src)][order(id)]
barplot(height = res$V1, col = rep(brewer.pal(4, "Set1"), 3))

enter image description here

修改

以下是Sumedh提供的ggplot2代码:

library(ggplot2)
ggplot(res, aes(x = id, y = V1, fill = src)) + 
  geom_bar(stat = "identity", position = "dodge")

enter image description here