【问题标题】:How to make one bar-chart from different data-frames with same format?如何从具有相同格式的不同数据框制作一个条形图?
【发布时间】:2016-07-18 16:01:37
【问题描述】:

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

我可以使用以下方法获取一个数据框的 column1 的条形图:

  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")

我想要类似于此图的输出(除了我显示每个类别的百分比),而种族将是不同数据框的名称,因子是数据框第 1 列的值。

【问题讨论】:

  • 为什么不给每个data.frame添加数据源列,然后合并data.frames?
  • @dayne 我不能这样做,因为它们的大小不同,这就是我显示百分比不计入频率的原因。
  • 大小无关紧要——您仍然可以按来源计算百分比。

标签: r ggplot2 bar-chart


【解决方案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))

编辑

这是Sumedh提供的ggplot2代码:

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

【讨论】:

  • 当然。还有一个问题!我的 C1 是因子变量,我想显示该类别的每个值在不同来源中的百分比,这与您的示例不同。例如,c1 值是男性和女性。当我编辑您的代码以获取不同来源的男性或女性百分比时出现错误。知道吗?
  • @Sajjad 你应该用一个清晰​​的可重复的例子提出一个新问题。
猜你喜欢
  • 2021-03-11
  • 2021-02-14
  • 2019-05-24
  • 2013-03-02
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多