R 是否有办法更改ggplot2中图例项之间的间距?

R 是否有办法更改ggplot2中图例项之间的间距?,r,ggplot2,legend,R,Ggplot2,Legend,是否有办法更改ggplot2中图例项之间的间距?我现在有 legend.position ="top" 它会自动生成一个水平图例。但是,项目的间距非常近,我想知道如何将它们隔开得更远。来自Koshke关于ggplot2的工作和他的博客() 在控制台中键入theme\u get(),以查看其他可编辑的图例属性 既然ggplot2软件包中不推荐使用opts,那么应该改用函数theme: library(grid) # for unit() ... + theme(legend.key.heigh

是否有办法更改ggplot2中图例项之间的间距?我现在有

legend.position ="top" 

它会自动生成一个水平图例。但是,项目的间距非常近,我想知道如何将它们隔开得更远。

来自Koshke关于ggplot2的工作和他的博客()


在控制台中键入
theme\u get()
,以查看其他可编辑的图例属性

既然
ggplot2
软件包中不推荐使用
opts
,那么应该改用函数
theme

library(grid) # for unit()
... + theme(legend.key.height=unit(3,"line"))
... + theme(legend.key.width=unit(3,"line"))

我用于在水平图例中添加空格的一个简单修复方法是在标签中添加空格(请参见下面的摘录):


我认为最好的选择是在
指南
中使用
指南

p + guides(fill=guide_legend(
                 keywidth=0.1,
                 keyheight=0.1,
                 default.unit="inch")
      )

注意使用了
default.unit
,无需加载
grid
包。

要在图例中添加条目间距,请调整主题元素
legend.text
的边距

要在每个图例标签的右侧添加30磅的空间(可能对水平图例有用):

要在每个图例标签的左侧添加30磅的空间(可能对垂直图例有用):

对于
ggplot2
对象
p
。关键词是
legend.text
margin

[关于编辑的注意:当这个答案第一次发布时,有一个bug。这个bug现在已经被修复了]

使用其中的任何一个

legend.spacing = unit(1,"cm")
legend.spacing.x = unit(1,"cm")
legend.spacing.y = unit(1,"cm")

看起来最好的方法(2018年)是在
主题
对象下使用
legend.key.size
。(例如,参见)

但是,如果您需要图例符号上的灰色背景,则此在其他方面不太有效(例如,如果您需要图例符号上的灰色背景):

2018年7月发布的
g1具有修改
legend.spating.x
legend.spating.y
legend.text
的工作选项

示例:增加图例键之间的水平间距

库(ggplot2)
ggplot(mtcars,aes(系数(气缸),填充=系数(气缸))+
geom_bar()+
coord_flip()+
比例填充酿酒机(“Cyl”,调色板=“深色”)+
最小主题(基本大小=14)+
主题(legend.position='top',
图例.间距.x=单位(1.0,'cm'))

注意:如果只想将间距扩大到图例文本的右侧,请使用

示例:将图例键标签移到底部并增加垂直间距

ggplot(mtcars,aes(系数(cyl),填充=系数(cyl))+
geom_bar()+
coord_flip()+
比例填充酿酒机(“Cyl”,调色板=“深色”)+
最小主题(基本大小=14)+
主题(legend.position='top',
图例.间距.x=单位(1.0,'cm'),
legend.text=元素\文本(边距=边距(t=10)))+
导向装置(填充=导向装置\图例(title=“Cyl”,
label.position=“底部”,
title.position=“left”,title.vjust=1)

示例:对于
scale\u fill\u xxx
guide\u colorbar

ggplot(mtcars、aes(mpg、wt))+
几何点(aes(填充=hp),pch=I(21),尺寸=5)+
比例填充绿色(指南=假)+
主题经典(基本尺寸=14)+
主题(legend.position='top',
图例.间距.x=单位(0.5,'cm'),
legend.text=元素\文本(边距=边距(t=10)))+
指南(fill=guide\u colorbar(title=“HP”,
label.position=“底部”,
title.position=“left”,title.vjust=1,
#围绕图例绘制边框
frame.color=“黑色”,
杆宽=15,
杆高=1.5)


对于垂直图例,设置
图例.key.size
只会增加图例键的大小,而不会增加它们之间的垂直间距

ggplot(mtcars)+
aes(x=气缸,填充=系数(气缸))+
geom_bar()+
比例填充酿酒机(“Cyl”,调色板=“深色”)+
最小主题(基本大小=14)+
主题(图例.key.size=单位(1,“厘米”))

为了增加图例键之间的距离,需要修改
legend draw.r
功能。有关更多信息,请参见此

#增加图例键之间垂直间距的功能
#@clauswilke

draw_key_polygon3感谢您的建议和Koshke博客的链接!然而不幸的是,这似乎改变了盒子的大小,而不是物品之间的间距。你可以用某种类型的覆盖物来“伪装”它。但我不认为有办法在传奇中获得额外的空间。这是我在ggplot2的邮件列表中能找到的唯一一个提到它的地方:我可以用它成功地增加图例之间的间距。使用负数有助于减少图例之间的间距。既然
opts
已被折旧,那么最好有一个当前的解决方案。这里:董的答案,目前在这条线索的底部,有一个2018年7月的更新。bug已经修复,不再需要像上面粘贴库中那样的黑客解决方法。这需要更多的更新投票,其他答案已经过时。这可能适用于水平图例。但是,对于绘图右侧的垂直图例,这只会增加关键点的高度,而不会增加关键点之间的间距。我的图例键仍然彼此非常接近。正如Mushin所说,与其他答案一样,如果图例是垂直的,则会拉伸图例键(例如线段)不填充键之间的空间。与几何线和几何点配合使用效果很好。此解决方案改变框的高度/宽度,而不是它们之间的间距。这是迄今为止处理此问题的唯一答案!这对于许多条目可能很有帮助:
scale\u fill\u manual(值=值,标签=集合名(粘贴(标签“”),条目
p + guides(fill=guide_legend(
                 keywidth=0.1,
                 keyheight=0.1,
                 default.unit="inch")
      )
p + theme(legend.text = element_text(
    margin = margin(r = 30, unit = "pt")))
p + theme(legend.text = element_text(
    margin = margin(l = 30, unit = "pt")))
legend.spacing = unit(1,"cm")
legend.spacing.x = unit(1,"cm")
legend.spacing.y = unit(1,"cm")
#Set-up:
    library(ggplot2)
    library(gridExtra)

    gp <- ggplot(data = mtcars, aes(mpg, cyl, colour = factor(cyl))) +
        geom_point()
  gpbw <- gp + theme_bw()

#Change spacing size:

  g1bw <- gpbw + theme(legend.key.size = unit(0, 'lines'))
  g2bw <- gpbw + theme(legend.key.size = unit(1.5, 'lines'))
  g3bw <- gpbw + theme(legend.key.size = unit(3, 'lines'))

  grid.arrange(g1bw,g2bw,g3bw,nrow=3)
  g1 <- gp + theme(legend.key.size = unit(0, 'lines'))
  g2 <- gp + theme(legend.key.size = unit(1.5, 'lines'))
  g3 <- gp + theme(legend.key.size = unit(3, 'lines'))

  grid.arrange(g1,g2,g3,nrow=3)

#Notice that the legend symbol squares get bigger (that's what legend.key.size does). 

#Let's [indirectly] "control" that, too:
  gp2 <- g3
  g4 <- gp2 + theme(legend.key = element_rect(size = 1))
  g5 <- gp2 + theme(legend.key = element_rect(size = 3))
  g6 <- gp2 + theme(legend.key = element_rect(size = 10))

  grid.arrange(g4,g5,g6,nrow=3)   #see picture below, left
  #This shows you why:
    gt <- gp2 + theme(legend.key = element_rect(size = 10,color = 'yellow' ))