ggplot条形图中的分组/堆叠系数级别

时间:2016-04-17 00:13:41

标签: r ggplot2

我对R来说比较新,而且是ggplot的初学者,但是我还没有找到答案来解决我看似简单的问题。使用ggplot,我想制作一个条形图,其中三个或更多绘制的因子级别中的两个堆叠。

基本上,这是我正在查看的数据类型:

df <- data.frame(Answer=c("good","good","kinda good","kinda good",
  "kinda good","good","bad","good","bad"))

这为我提供了三个级别的因子,其中两个非常相似:

       Answer
1       good
2       good
3 kinda good
4 kinda good
5 kinda good
6       good
7        bad
8       good
9        bad

如果我让ggplot现在为我查看这些数据,

c <- ggplot(df, aes(df$Answer))
c + geom_bar()

enter image description here

我会得到一个包含三列的条形图。但是,我想最后得到两个列,其中一列应该是两个因子级别的堆栈“好”和“有点好”,仍然明显分开。

我正在使用100列输入(正字法研究),我需要手动完成,因此我希望尽可能轻松地调整代码。其中一些有十多个级别,我需要将它们分成三列。因此,在大多数情况下,我的数据更可能如下所示:

df <- data.frame(Answer=c("good","goood","goo0d","good",
  "I don't know","Bad","bad","baaad","really bad"))

我会把它归为三类。在大约一半的情况下,我仍然可以使用模式匹配进行过滤,因为我将查看空间的使用。然而,另一半正在考虑资本化,这会变得有点混乱,或者至少非常繁琐。

我想到了两种不同的方法来更有效地解决这个问题:

只需重写因子级别,但这会导致信息丢失(我希望将这两个级别分开)。我想保留原始级别名称,因为我认为我需要它们来绘制堆叠列中的比率并正确标记列。

我可以将相应的列/因子分成两个独立的列/因子,并将它们彼此相邻绘制,从而创建一个“假的”第三维。这看起来是最有前途的方法,但是在我使用它完成100列数据之前 - 是否有更优雅的方法,可能在ggplot2包中,我可以只指向/分组级别名称而不是更改/重新排序它背后的数据框架?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以尝试以下方法,以便在分组答案时采用更自动化的方法。

我们根据您的数据选择一些关键字并循环显示,以查看哪些答案可能包含每个关键字

groups <- c('good','bad','ugly','know')

df <- data.frame(Answer=c("good","medium good","kinda good","still good",
                          "I don't know","good","bad","good","really bad"))

idx <- sapply(groups, function(x) grepl(x, df$Answer, ignore.case = TRUE))
df$group <- rep(colnames(idx), nrow(idx))[t(idx)]
df

#         Answer group
# 1         good  good
# 2  medium good  good
# 3   kinda good  good
# 4   still good  good
# 5 I don't know  know
# 6         good  good
# 7          bad   bad
# 8         good  good
# 9   really bad   bad


library('ggplot2')
ggplot(df, aes(group, fill = Answer)) + geom_bar()

enter image description here