In ggplot2, I don't know how to increase the gap between legend items. I've read some similar questions from these posts 1, 2, but it did not work for my case. Below is my code, which generates the figure as attached. I'd like to increase the gap between legend items as shown in the attached figure. Any helps or hints would be very appreciated. Thank you.
My code:
## data:
df <- data.frame(supp=rep(c(" link ratio 1:1 ", " link ratio 1:2 ", " link ratio 1:3 ",
" link ratio 1:4 ", " link ratio 1:5 ", " link ratio 1:6 "),
each=7, ## number of bargroups
ordered = TRUE), ## nrows
test_X=rep(c("1.0", "1.2", "1.4", "1.6", "1.8", "2.0", "2.2"), 6), ## ncols
test_Y=c(
8, 9, 16, 18, 23, 28, 27,
14, 15, 27, 30, 38, 47, 47,
8, 8, 11, 15, 21, 25, 22,
12, 13, 23, 25, 33, 39, 39,
7, 8, 13, 13, 18, 24, 24,
10, 12, 19, 22, 27, 33, 33))
## reorder legend items
df$supp <- factor(df$supp, c(" link ratio 1:1 ", " link ratio 1:2 ", " link ratio 1:3 ",
" link ratio 1:4 ", " link ratio 1:5 ", " link ratio 1:6 "))
## libs
require(ggthemes)
require(ggplot2)
g<-ggplot(data=df, aes(clarity, x=test_X, y=test_Y, fill=supp)) +
geom_bar(width=0.75, stat="identity", position=position_dodge(width=0.75), colour="#000000", size=1.35) +
scale_fill_brewer(palette="Greens") +
theme_bw(base_size = 30, base_family = "") +
theme(panel.border = element_rect(fill = NA, colour = "black", size = 2.75), legend.position="top",
legend.title = element_blank(),
legend.key = element_rect(fill = NA, colour = "black"),
legend.key.width = unit(1.4, "cm"),
legend.key.height = unit(0.5, "cm"),
legend.margin = unit(0.65, "cm"),
legend.text = element_text(size = 55, face= "bold")
) + scale_y_continuous(expand = c(0,0), limits=c(0, 55))
g<-g + guides(fill=guide_legend(ncol=2, byrow = TRUE))
g<-g + labs(x = "Rate", y="#links")
print(g)
Figure:
My desired figure:
There is now an easy way to achieve this thanks to legend.spacing.x
and legend.spacing.y
:
library(ggplot2)
df <- data.frame(
supp = rep(c("link ratio 1:1", "link ratio 1:2", "link ratio 1:3",
"link ratio 1:4", "link ratio 1:5", "link ratio 1:6"),
each = 7, ordered = TRUE),
test_X = rep(c("1.0", "1.2", "1.4", "1.6", "1.8", "2.0", "2.2"), 6),
test_Y = c(8, 9, 16, 18, 23, 28, 27,
14, 15, 27, 30, 38, 47, 47,
8, 8, 11, 15, 21, 25, 22,
12, 13, 23, 25, 33, 39, 39,
7, 8, 13, 13, 18, 24, 24,
10, 12, 19, 22, 27, 33, 33)
)
g <- ggplot(data = df, aes(clarity, x = test_X, y = test_Y, fill = supp)) +
geom_bar(width = 0.75, stat = "identity",
position = position_dodge(width = 0.75),
colour = "#000000", size = 1.35) +
scale_fill_brewer(palette = "Greens") +
theme_bw(base_size = 30) +
theme(
panel.border = element_rect(fill = NA, colour = "black", size = 2.75), legend.position = "top",
legend.title = element_blank(),
legend.key = element_rect(fill = NA, colour = "black"),
legend.key.width = unit(1.4, "cm"),
legend.key.height = unit(0.5, "cm"),
legend.spacing.x = unit(0.5, 'cm'),
legend.spacing.y = unit(1.0, 'cm'),
legend.text = element_text(size = 55, face = "bold")
) +
scale_y_continuous(expand = c(0, 0), limits = c(0, 55)) +
guides(fill = guide_legend(ncol = 2, byrow = TRUE)) +
labs(x = "Rate", y = "#links")
g
Note 1: you don't need ggthemes
and you don't need to reorder your legend items, so I removed those from your code.
Note 2: beside a little reformatting, I kept your code as is, but it might be better to decrease the size of the legend (a lot).
Note 3: credit goes to Tung for his answer here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With