有几种方法可以解决这个问题。您可以继续使用 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)
)