【发布时间】:2016-08-08 20:25:21
【问题描述】:
我对 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()
我将得到一个包含三列的条形图。但是,我想最终得到两列,其中一列应该是“好”和“有点好”两个因子水平的堆栈,仍然明显分开。
我正在处理 100 列输入(正字法研究),我需要手动完成这些输入,因此我希望尽可能轻松地调整代码。其中一些有十多个级别,我需要将它们分成三列。因此,在大多数情况下,我的数据更可能如下所示:
df <- data.frame(Answer=c("good","goood","goo0d","good",
"I don't know","Bad","bad","baaad","really bad"))
因此,我将其分为三类。在大约一半的情况下,我可能仍然可以使用模式匹配进行过滤,因为我将研究空格的使用。然而,另一半正在研究大写,这会有点混乱,或者至少非常乏味。
我想了两种不同的方法来更有效地解决这个问题:
只需重写因子级别,但这会导致信息丢失(我希望将两个级别分开)。我想保留原始级别名称,因为我认为我需要它们来绘制该堆叠列内的比率并正确标记该列。
我可以将相应的列/因子拆分为两个单独的列/因子并将它们彼此相邻绘制,从而创建一个“假”的第三维。这看起来是最有前途的方法,但在我处理 100 列数据之前 - 是否有更优雅的方法,可能在 ggplot2 包中,我可以在其中指向/分组级别名称而不是更改/重新排序背后的数据框?
谢谢!
【问题讨论】:
-
ggplot(df, aes(grepl('good', Answer), fill = Answer)) + geom_bar()会大致了解。基本上它是将组放在 x 上(好或不好)并按Answer着色 -
感谢您如此迅速地回复、编辑,当然还有答案!这对两组非常有效!由于您只是将您的答案作为评论发布,我认为如果我需要将十个级别分为三列,可能还有另一种解决方案?
-
我尽量不鼓励 ggplot :} 将几个组分组为更少不是 ggplot 问题。如果你想创建 n 组,
grepl不会非常有用。如果您发布一些更符合您需要的数据(而不仅仅是两个级别),那将有所帮助 -
谢谢 - 你会鼓励什么?我添加了一些关于我的数据格式的更多细节。看起来很像我实际上必须改变我的数据架构,而不是告诉 ggplot 从不同的地方提取信息。