一个图中两个图例之间的间隙较小(例如颜色和大小比例)

Posted

技术标签:

【中文标题】一个图中两个图例之间的间隙较小(例如颜色和大小比例)【英文标题】:Smaller gap between two legends in one plot (e.g. color and size scale) 【发布时间】:2012-12-15 18:00:00 【问题描述】:

如何在一个情节中减少两个指南之间的差距。在下面的示例中,两个指南来自颜色和大小比例,我想更改两者之间的差距,以便标题“大小”正好低于 1 的图例点。设计方面,它可能不会在这个例子中有意义,但在我的实际应用中确实如此。

df=data.frame(x=rnorm(100),y=rnorm(100),color=factor(rbinom(100,1,0.5)),size=runif(100))
ggplot(df,aes(x=x,y=y,color=color,size=size)) + geom_point()

编辑:这是情节。我想让绿线和箭头突出显示的间隙变小。

【问题讨论】:

您是在谈论 lattice 和 ggplot 术语中的“尺度”,还是指“图例”? 我说的是左侧图例中名为“颜色”和“大小”的图例。我想搬到两个更近的地方。 您更好地定义了问题,但可能重复? :/ ***.com/questions/11366964/… @AnthonyDamico 不,它不是重复的。 @Anthony,我认为您的链接线程是关于图例键之间的间距(示例中0' and 1' 颜色图例的键)。我的问题是关于两个图例之间的间距,如绿色箭头所示。 【参考方案1】:

我尝试自定义legendguide参数但我找不到解决方案。我希望使用 ggplot2 设置提供解决方案。

这里有 2 个基于 gtablegrid 软件包的解决方案。

对于gtable 解决方案,代码的灵感来自question。

  library(gtable)
  # Data transformation
  data <- ggplot_build(p)
  gtable <- ggplot_gtable(data)
  # Determining index of legends table
  lbox <- which(sapply(gtable$grobs, paste) == "gtable[guide-box]")
  # changing the space between the 2 legends: here -0.5 lines
  guide <- gtable$grobs[[lbox]]
  gtable$grobs[[lbox]]$heights <- unit.c(guide$heights[1:2],
                                    unit(-.5,'lines'),  ## you can the GAP here
                                    guide$heights[4:5])
  # Plotting
  grid.draw(gtable)

类似使用grid包(我们在图例的视口中重绘)

pp <- grid.get('guide',grep=T)
 depth <- downViewport(pp$wrapvp$name)
 guide <- grid.get('guide',grep=T)
 grid.rect(gp=gpar(fill='white'))
 guide$heights <- unit.c(guide$heights[1:2],unit(-0.2,'lines'),guide$heights[4],unit(0.1,'lines'))
 grid.draw(guide)
 upViewport(depth)

【讨论】:

谢谢,我知道。我的问题是是否可以选择将尺寸和色标的两个指南/两个图例靠得更近。 @user1318686 如果您在答案中附加一张图片以显示您的最终输出结果会怎样? 完成。我想让绿线和箭头突出显示的间隙变小。 我仍然看不到两个传说之间的小差距。你错过了什么吗? 谢谢!这似乎是扩大差距的好方法,但我不知道如何使用它来缩小差距。【参考方案2】:

现在似乎可以使用主题参数:

ggplot(df,aes(x=x,y=y,color=color,size=size)) + geom_point() + 
theme(legend.spacing.y = unit(-0.5, "cm"))

您也可以尝试减少图例的边距:

legend.margin = margin(-0.5,0,0,0, unit="cm")

或更老

legend.margin=unit(0, "cm")

【讨论】:

以上是关于一个图中两个图例之间的间隙较小(例如颜色和大小比例)的主要内容,如果未能解决你的问题,请参考以下文章

调整图像大小并用颜色填充比例间隙

R语言ggplot2可视化自定义多个图例(legend)标签之间的距离实战(例如,改变数据点颜色和数据点大小图例之间的距离)

在带有子图的 geopandas 图中添加图例会改变图的大小

如何在 plotly express 条形图中隐藏颜色条和图例?

如何在 Python matplotlib 子图中显示图例

在基础R的散点图中转换图例的形状和颜色