我正在复制一些所有剧本(一年前编码)并发现我不再获得相同的剧情。我使用相同的数据集和相同的代码;唯一的区别是我的R安装版本和ggplot2 ---所以我假设这是问题所在。
让我告诉你一些愚蠢的阴谋的问题。当生成带有百分比标签的堆积条形图时,我会做类似的事情:
ess2 <- ddply(ess, .(essround2), function(.){
res <- cumsum(prop.table(table(factor(.$contplt2))))
res2 <- prop.table(table(factor(.$contplt2)))
data.frame(lab=names(res), y=c(res), res2=res2, pos=cumsum(res2)-0.5*res2)
})
ggplot(ess[ess$contplt2!="NA",], aes(x=essround2))+
geom_bar(aes(fill=contplt2), position="fill")+
geom_text(data=ess2[ess2$lab!="NA",],
aes(label=round(res2.Freq, 2), x=essround2, y=pos.Freq))+
labs(x="ESS Round", y="Percent")+
scale_x_discrete(breaks=c("R1", "R2", "R3", "R4", "R5", "R6"),
labels=c("2002", "2004", "2006", "2008", "2010", "2012"))+
ggtitle("Contacted politicians")+
scale_fill_manual(name="Contacted politician", values=c("#31a354", "#a1d99b"))
结果如下:
就像今天一样,如果我使用完全相同的数据集尝试完全相同的代码,我会得到以下图:
正如您所看到的那样,标签没有正确放置在条形图上,并且颜色反转使得图表的读取变得笨拙(好像堆积的条形图已经不够笨拙)。
很抱歉没有给你可重复的代码,但我相信我的问题只是我没有更新我的代码,因为ggplot2开发了(或者可能是问题?)如果你能在我的代码中发现可能正在生成的“旧”的东西第二个,不稳定的阴谋,我将非常感激并乐意从那里进行调查。
感谢!!!
编辑:由于评论中的建议,图中的百分比是不同的,因为我使用了不同的国家(但相同的代码和相同的数据集)。我使用不同版本的R和ggplot2生成完全相同的绘图,您可以看到问题仍然存在:答案 0 :(得分:0)
在生成contplt2
之前和之后,尝试将ess2
的标签切换两次
希望它可以帮到你。
# Here I try to reproduce your dataset
ess <- data.frame(
essround2 = c(
c(rep(2002,76),rep(2002,100-76)),
c(rep(2004,78),rep(2004,100-78)),
c(rep(2006,81),rep(2006,100-81)),
c(rep(2008,79),rep(2008,100-79)),
c(rep(2010,79),rep(2010,100-79)),
c(rep(2012,82),rep(2012,100-82))
),
contplt2 = c(
c(rep("No",76),rep("Yes",100-76)),
c(rep("No",78),rep("Yes",100-78)),
c(rep("No",81),rep("Yes",100-81)),
c(rep("No",79),rep("Yes",100-79)),
c(rep("No",79),rep("Yes",100-79)),
c(rep("No",82),rep("Yes",100-82))
)
)
# First switch of contplt2 levels
ess$contplt2 <- factor(ess$contplt2, levels=levels(ess$contplt2)[c(2,1)])
library(plyr)
library(ggplot2)
ess2 <- ddply(ess, .(essround2), function(.){
res <- cumsum(prop.table(table(factor(.$contplt2))))
res2 <- prop.table(table(factor(.$contplt2)))
data.frame(lab=names(res), y=c(res), res2=res2, pos=cumsum(res2)-0.5*res2)
})
# Second switch of contplt2 levels
ess$contplt2 <- factor(ess$contplt2, levels=levels(ess$contplt2)[c(2,1)])
ggplot(ess[ess$contplt2!="NA",], aes(x=essround2))+
geom_bar(aes(fill=contplt2), position="fill")+
geom_text(data=ess2[ess2$lab!="NA",],
aes(label=round(res2.Freq, 2), x=essround2, y=pos.Freq))+
labs(x="ESS Round", y="Percent")+
scale_x_discrete(breaks=c("R1", "R2", "R3", "R4", "R5", "R6"),
labels=c("2002", "2004", "2006", "2008", "2010", "2012"))+
ggtitle("Contacted politicians")+
scale_fill_manual(name="Contacted politician", values=c("#a1d99b", "#31a354"))