【发布时间】:2016-04-11 21:43:58
【问题描述】:
注意:我在与 Mike 讨论后更新了这篇文章,因为我的问题可能表明 ggplot 中存在错误。基本上,以前我能够使用 ggplot 创建一个条形图,图例键之间没有空格(图 2 是一个示例输出,Link 2 也是如此)。然而,现在 ggplot 似乎会自动在图例键之间添加空格...
原帖
我想创建一个带有图例的条形图。我正在做的一个例子如下:
b <- c("A","A","A","B","B","B", "A","A","A","B","B","B", "A","A","A","B","B","B")
c <- c(11,22,33,99,88,77, 44,55,66,61,62,63, 83,85, 87, 84,86, 88)
dft <- data.frame(b,c)
ggplot(dft, aes(b,c, fill=b))+
stat_summary(fun.y=mean, geom="bar", position="dodge", colour="black", size=.2)+
scale_fill_manual(values=c("grey", "white"))+
theme(legend.key = element_rect(colour = 'black', size=.01))
ggsave("T3.jpg")
我遇到的问题是 ggplot 似乎会自动在两个图例键之间创建空间。
图 1
有没有办法删除图例键之间的这个空间。请参阅下面的图 2,了解我想做的示例。
图2
see Link 1 已经提出了一个类似的问题,其目的是在图例键之间创建更多空间,但不幸的是,没有一个答案可以帮助我解决我的问题(即,删除图例键之间的空间)。
我还遇到了一个链接,其中条形图表明似乎可以删除图例键之间的空格:Link 2。但是,在将脚本改编为我的示例时,出现了完全相同的问题(图例键之间的空格)。
为什么这个链接上的条形图没有空格,而当我尝试复制时,这个空格是在图例键之间添加的?我也许还应该补充一点,我最近更新了 ggplot。这和那个有关系吗?
dft2<-ddply(dft,.(b),plyr::summarize, meanc = mean(c))
ggplot(data=dft2, aes(x=b, y=meanc, fill=b)) +
geom_bar(stat="identity",position=position_dodge(), colour="black", size=.3) +
scale_fill_manual(values=c("grey", "white")) +
theme(legend.key = element_rect(colour = 'black', size=.01))
ggsave("T2.jpg")
任何有关如何解决此问题的建议都将受到欢迎。顺便说一句,增加更多空间对我来说也是一个潜在的解决方案,但从上一篇文章(链接 1)可以看出,这在 ggplot 中可能不容易实现。
开始编辑
为了完整起见,我将粘贴在我原来的 ggplot 脚本中,该脚本用于生成图例键之间没有空格的图例(图 2 是使用此脚本创建的 - 图 2 中省略了条形等,因为这个问题只与传说有关):
对于summarySE函数,see Link 3:
slc <- summarySE(sl, measurevar="EStroop.ART", groupvars=c("Etarget","Econgruency"), na.rm=T)
ggplot(data=slc, aes(x=Etarget, y=EStroop.ART, fill=Econgruency))+
geom_bar()+
geom_bar(stat="identity", position=position_dodge(), colour="black", show_guide=FALSE, size=0.15)+
geom_errorbar(aes(ymin=EStroop.ART-ci, ymax=EStroop.ART+ci),
width=0.2, # Width of the error bars
position=position_dodge(.9), size=0.15)+
labs(x="Target", y="Adjusted Reaction Time (milliseconds)")+ #set other titles
scale_fill_manual(values=c("grey", "white"))+
theme(axis.title.x = element_text(face="bold", vjust=0.1, size =6),
axis.title.y = element_text(face="bold", vjust=1.0, size =6),
axis.text.x = element_text(size = 5, colour="black"),
axis.text.y = element_text(size = 5, colour="black"),
legend.key = element_rect(colour = 'black', size=.2), # to change border of the legend box
legend.text=element_text(size = 4),
legend.title=element_blank(),
panel.grid.major = element_line(size=.20),
panel.grid.minor = element_line(size=.1),
axis.ticks=element_line(size=.2),
axis.line=element_line(colour="black", size=0.15),
legend.key.size = unit(.3, "cm"))+ # size of legend box
coord_cartesian(ylim=c(500,700)) # to "zoom" in on the graph
ggsave("ES_cong.tiff", width=86, height=60, units='mm', dpi=1200)
结束编辑
【问题讨论】:
-
我把它搞砸了,你的例子绘制了 2600 像素高,我看不到间隙。键的左线虽然有点粗。那不应该。
-
对于图 1,应该有一个间隙:图例键的黑色边框之间有一条细灰线。对于图 2,不应该有差距(这是我想要实现的)。你指的是哪个图?此外,您应该能够使用上面的示例脚本生成图 1 的图例 - 再次,这应该会产生这个差距。请注意,这是一个最小的差距,但对我来说仍然清晰可见。我没有发现边界线有不同程度的粗细,但理想情况下不应该是这种情况。欢迎任何有关如何解决此问题的建议。
-
只需将
ggsave中的.jpg替换为.pdf或.svg。更改要保存的文件类型。