我想在一个图表中绘制几个箱图,并知道那里已有类似的线程,但似乎没有一个适用于我的情况。
我需要可视化的数据描述:我有关于哪些政策领域被认为是重要的选民调查数据(x),我想通过数据来对比这些选民投票给某一方的可能性(y) )。如果我只想为一个派对做这件事,这很简单,但想法是在一个图中为三个派对绘制它(否则我们会有太多的数字并且很难将它们相互比较)。
让我们来看看这些假设数据(MyData):
Party_A Party_B Party_C Salience
8 2 5 "Environmental policy"
7 0 4 "Environmental policy"
9 3 6 "Environmental policy"
0 9 4 "Tax policy"
1 8 3 "Tax policy"
2 6 3 "Tax policy"
2 3 9 "Immigration policy"
3 5 9 "Immigration policy"
1 6 0 "Immigration policy"
“Party_A:C”代表“你会考虑投票......(0-10比例)”和“显着性”只是表明他们提到哪些政策领域很重要。 (如果提到了一个策略区域,我还有另一组二进制变量为1,如果没有,则为0,这些变量的名称只是给定的策略区域 - 以防需要这样做。)
现在这就是我的尝试:
library(ggplot2)
ggplot(MyData, aes(Salience,Party_A)) + geom_boxplot(fill="black", alpha=.5) +
geom_boxplot(aes(Salience,Party_B), fill="blue", alpha=.5) +
geom_boxplot(aes(Salience,Party_C), alpha=.5) +
geom_hline(yintercept=5, color="darkred", linetype="dotted") +
theme(text=element_text(family="serif"), panel.background=element_blank(),
axis.text.x=element_text(angle=90,hjust=1,vjust=.3))
这有两个问题我无法解决:
fill=labels
作为组指示符来实现这一点。na.omit()
并事先通过这样做对其进行子集化:MyData[!is.na(MyData)]
。在这两种情况下,图表都会消失。这有什么解决方案吗?感谢任何建议!
答案 0 :(得分:1)
这样做的一种方法是以长格式处理您的数据。此外,它会缩短并澄清你的命令。
您可以在包melt
中使用reshape2
功能。
library(ggplot2)
library(reshape2)
这是您的数据示例。
dat <- read.table(text='Party_A Party_B Party_C Salience
8 2 5 "Environmental policy"
7 0 4 "Environmental policy"
9 3 6 "Environmental policy"
0 9 4 "Tax policy"
1 8 3 "Tax policy"
2 6 3 "Tax policy"
2 3 9 "Immigration policy"
3 5 9 "Immigration policy"
1 6 0 "Immigration policy"',
header=TRUE)
融化数据的命令。
dat.m <- melt(dat, variable.name = "Party", value.name="Vote")
绘制数据的命令:ggplot
会自动将箱形图放在需要的位置。
ggplot(data=dat.m, aes(x=Salience, y=Vote, fill=Party)) +
geom_boxplot(alpha=0.5) +
scale_fill_manual(values=c("black", "blue", "white")) +
geom_hline(yintercept=5, color="darkred", linetype="dotted") +
theme(text=element_text(family="serif"), panel.background=element_blank(),
axis.text.x=element_text(angle=90,hjust=1,vjust=.3))