gpt4 book ai didi

r - 如何删除ggplot2中图例键之间的空格

转载 作者:行者123 更新时间:2023-12-04 11:19:20 26 4
gpt4 key购买 nike

注意:我有 更新 这篇文章是在与 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

enter image description here

有没有办法删除图例键之间的这个空间。请参阅下面的图 2 以了解我想要执行的操作的示例。

图2

enter image description here

已经有人问过类似的问题 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)

结束编辑

最佳答案

这可以通过 rectangle_key_glyph() 解决来自 cowplot 包的函数。它有一个选项来设置您想要的确切填充,可以是正的或负的。
默认情况下,没有间隙。这会导致框周围的两条线并排绘制,这意味着它们看起来更粗。这可能不是您想要的。

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() .我们不希望在图例键下绘制任何内容。当您使用正填充时,这一点尤其重要。

关于r - 如何删除ggplot2中图例键之间的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com