【问题标题】:How to specify the legend box size in ggplot/ggplot2如何在 ggplot/ggplot2 中指定图例框大小
【发布时间】:2019-02-04 18:39:03
【问题描述】:

在 R/ggplot2 中,我有多个图,每个图都有一个图例框。 我希望每个图的图例框的宽度相同,但 ggplot2 尝试根据图例名称、键值等(每个图都是唯一的)动态调整图例框的大小。 各种图必须适合指定的发布槽,具有指定的图例宽度,并且必须单独制作图(因此无法保证图上的图例宽度相同)。 查看theme 我找不到指定图例框宽度的选项...有什么想法吗?

【问题讨论】:

  • 可能是keywidth 参数:guides(color = guide_legend(keywidth = 10))——例如:ggplot(mtcars, aes(x = hp, y = mpg, col = factor(cyl))) + geom_point() + guides( color = guide_legend(keywidth = 10) )
  • 这增加了每个键/值的宽度。我想要的是在每个图例中每个键的默认大小(例如 size = 1),但背景“框”是固定宽度,即使这意味着图例中每个键/值周围都有很大的边距.
  • 并且使用固定的边距没有帮助?如:ggplot(mtcars, aes(x = hp, y = mpg, col = factor(cyl))) + geom_point() + theme( legend.margin = margin(5, 50, 5, 50) )
  • 不,它只控制边距,这样总大小就是内容周围的边界框加上边距,而内容的边界框本身仍然是动态大小的。
  • 您可以考虑plot_grid() 来自cowplot 包(参见here):从每个图中提取图例,使用指定的rel_widths 分别绘制无图例图和图例确定分配给每个人的空间。

标签: r ggplot2


【解决方案1】:

要指定图例框的大小,您可以使用+ theme(legend.key.size = unit(2, "cm"))

library(tidyverse)
tb <- tibble(a = 1:10, b = 10:1, c = rep(1:2, 5))

ggplot(tb, aes(a, b, colour = c)) +
  geom_point() +
  theme(legend.key.size = unit(0.2, "cm"))

更多细节和额外修改在herekeywidth 参数下here

【讨论】:

    【解决方案2】:

    您可以尝试如下更改您的theme 呼叫:

    theme(legend.margin =margin(r=10,l=5,t=5,b=5))?
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      相关资源
      最近更新 更多