简体   繁体   English

ggplot2增加了图例项之间的差距

[英]ggplot2 increase the gap between legend items

In ggplot2, I don't know how to increase the gap between legend items. 在ggplot2中,我不知道如何增加图例项之间的差距。 I've read some similar questions from these posts 1 , 2 , but it did not work for my case. 我读过这些职位的一些类似的问题12 ,但它并没有对我的情况下工作。 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 : 现在有一种简单的方法可以实现这一点,这要归功于legend.spacing.xlegend.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. 注意1:您不需要ggthemes ,也不需要重新排序图例项,因此我从代码中删除了这些项。

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). 注意2:除了重新格式化之外,我保持你的代码不变,但减少图例的大小可能会更好(很多)。

Note 3: credit goes to Tung for his answer here . 注3: 在这里 ,他的答案归功于

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM