ggplot2中调整plot.margin后如何将图例置于绘图窗口底部?
解决ggplot2图例贴底部且增大绘图区与图例间距的问题
你遇到的问题根源在于plot.margin控制的是整个绘图对象(包含绘图区、图例等所有元素)到画布边缘的距离,所以原来的设置会让整个图的底部到画布底部留4cm空隙,图例自然就离底部有距离了。要实现图例紧贴画布底部,同时让绘图区和图例之间有足够间距,有两种可行方法:
方法一:调整图例对齐方式+图例上方边距
通过legend.justification让图例下边缘对齐画布底部,再用legend.box.margin给图例上方加间距,替代原来的底部边距设置:
library("ggplot2") d <- data.frame(x = c(8,6,5,1,8,9,6,4), y = c(6,5,4,3,7,1,6,4), v = rep(c("a","b"), each = 4)) p <- ggplot(d, aes(x, y, colour = v)) + geom_point() p + theme( # 画布边缘到整个绘图对象的边距,底部设为小值让图例贴近底部 plot.margin = unit(c(1,1,0.5,1), "cm"), # 图例位置设为底部 legend.position = "bottom", # 让图例下边缘对齐画布底部 legend.justification = "bottom", # 给图例上方加3.5cm间距,和底部0.5cm边距合计4cm,和原需求一致 legend.box.margin = unit(c(3.5, 0, 0, 0), "cm") )
方法二:用坐标定位图例+图例上方边距
直接用坐标指定图例位置在画布底部居中,再通过图例上方边距拉开与绘图区的距离:
p + theme( # 画布底部到绘图对象的边距设为0,让图例完全贴底 plot.margin = unit(c(1,1,0,1), "cm"), # 图例位置设为画布底部居中(x=0.5是水平居中,y=0是垂直底部) legend.position = c(0.5, 0), # 图例自身的对齐点设为底部居中,和位置匹配 legend.justification = c(0.5, 0), # 图例上方加4cm间距,满足绘图区与图例的距离需求 legend.box.margin = unit(c(4, 0, 0, 0), "cm") )
两种方法都能实现:图例紧贴绘图窗口底部,同时绘图区和图例之间有足够的底部间距。
内容的提问来源于stack exchange,提问作者homgran
相关产品推荐
相关产品推荐

