注意:,在与讨论之后,更新了,因为我的问题可能是ggplot中的一个错误。基本上,以前我能够使用ggplot在图例键之间没有空格的情况下创建一个条形图(如链接2一样,图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
见链接1已经提出了一个类似的问题,目的是在图例键之间创造更多的空间,但不幸的是,没有任何答案帮助我解决我的问题(即移除图例键之间的空间)。
我还看到了一个链接,其中的条形图显示,似乎可以删除图例键之间的空格:链接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函数,见链接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)
端编辑
发布于 2020-09-10 15:05:58
这可以通过牛仔绘图包中的rectangle_key_glyph()
函数来解决。它有一个选项,可以设置确切的填充,可以是积极的,也可以是消极的。
默认情况下,不存在缺口。这会使盒子周围的两条线并排画,这意味着它们看起来更厚。这可能不是你想要的。
library(ggplot2)
library(cowplot)
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 = mean, geom = "bar", position = "dodge",
colour = "black", size = 0.2,
key_glyph = rectangle_key_glyph(
colour = "black"
)
) +
scale_fill_manual(values = c("grey", "white")) +
theme(legend.key = element_blank())
我更喜欢的解决方案是把差距拉大,所以很明显它就在那里。
ggplot(dft, aes(b, c, fill = b))+
stat_summary(
fun = mean, geom = "bar", position = "dodge",
colour = "black", size = 0.2,
key_glyph = rectangle_key_glyph(
colour = "black",
padding = margin(3, 3, 3, 3)
)
) +
scale_fill_manual(values = c("grey", "white")) +
theme(legend.key = element_blank())
但是,你也可以使用负填充,让线完全地躺在对方的中间。这里用size = 2
来夸大效果。
ggplot(dft, aes(b, c, fill = b))+
stat_summary(
fun = mean, geom = "bar", position = "dodge",
colour = "black", size = 2,
key_glyph = rectangle_key_glyph(
colour = "black",
padding = margin(-2, -2, -2, -2)
)
) +
scale_fill_manual(values = c("grey", "white")) +
theme(legend.key = element_blank())
注意,在所有这些情况下,我都设置了legend.key = element_blank()
。我们不想在我们的传奇钥匙下面画任何东西。这是特别重要的,当你使用一个积极的填充。
https://stackoverflow.com/questions/34656202
复制相似问题