ggplot2:每个方面网格的空间图例/操纵各个图例条目的位置[重复]
Posted
技术标签:
【中文标题】ggplot2:每个方面网格的空间图例/操纵各个图例条目的位置[重复]【英文标题】:ggplot2: space legend per facet grid / manipulate position of individual legend entries [duplicate] 【发布时间】:2021-10-25 09:00:55 【问题描述】:我有以下代码:
ggplot(data = mpg[is.element(mpg$manufacturer, c("audi", "dodge", "ford")),], mapping = aes(x = year, colour = manufacturer)) +
geom_line(stat = "count") +
facet_wrap(~manufacturer, nrow = 3)
这给了我这个情节,但我想要的是用 空间。潜在的问题是是否有办法操纵单个图例条目并操纵它们的位置?
谢谢!
【问题讨论】:
也许你可以试试gridExtra
包。如果您想使用它,请参阅this post。
您能否再解释一下您的意思是“每个带有空格的网格的单独图例”?
你可能会觉得这篇文章很支持:***.com/questions/14840542/…
【参考方案1】:
有几种方法可以解决这个问题。您可以继续使用 gridExtra
包并基本上逐个构建您的情节(构建 grobs 或“图形对象”)。这种方式应该可以,但是有点麻烦。
更简单的方法是熟悉ggplot2
的所有theme elements,这将使您能够控制情节的各个方面。
这是我在 theme()
中一起使用的元素,以使事情看起来正确:
legend.key.height
。此元素控制每个图例“键”的高度。这些是代表键标题旁边的行的符号。
legend.key.width
。图例键的宽度......同样的交易。
legend.key
。我们将其设置为element_blank()
。它是键的背景部分。如果我没有将其设置为空白,那么线条下方会有那些灰色的大矩形,看起来很奇怪。把它放在一边,你就会明白我的意思了。
legend.title
。这控制了图例标题的主题。在这里,我用它来控制标题的边距,如您所见...
plot.margin
。地块周围的区域。
首先,让我们自己控制键的位置,使其垂直展开。我们可以通过将每个键的高度设置为绘图总空间的 1/3 来做到这一点。 "npc"
是基本对应于相对绘图区域的单位,因此 0.33 npc
对于每个键的大小来说将略小于绘图的三分之一。我用legend.key.width
使按键变宽,然后用legend.key = element_blank()
去除每个按键的灰色背景。
plot + theme(
legend.key.height = unit(0.3, "npc"),
legend.key.width = unit(30, "pt"),
legend.key = element_blank()
)
这让我们接近,但并不完全在那里。原因是图例标题仍然与剧情顶部对齐。最理想的情况是,您希望标题高于位于绘图的顶部,以便键与每个绘图居中对齐。为了做到这一点,我们可以使用一点诡计...我可以通过将边距设置为负数来欺骗ggplot2
将图例的标题上移!这会将标题向上移动,但也会将其放在情节区域上方。作为回应,我们还将增加绘图区域的上边距以确保标题保留在绘图上。这是使用结果图执行此操作的最终代码:
plot + theme(
legend.key.height = unit(0.3, "npc"),
legend.key.width = unit(30, "pt"),
legend.key = element_blank(),
legend.title = element_text(margin=margin(t=-30)),
plot.margin=margin(t=30)
)
【讨论】:
谢谢!我知道gridExtra
解决方案,但这更优雅。以上是关于ggplot2:每个方面网格的空间图例/操纵各个图例条目的位置[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将水平线添加到 R 中 ggplot2 中的堆叠条形图,并在图例中显示