如何让ggplot2图表标题与图例在左上角对齐?
解决ggplot2标题与左上角图例水平对齐的问题
要实现标题和图例的水平对齐且不遮挡绘图区域,有两种简洁的实用方案:
方案1:统一标题与图例的对齐基准
将标题的对齐参考系设置为绘图区(panel),和图例的默认参考系保持一致,二者自然就能水平对齐:
ggplot(mtcars, aes(wt, qsec)) + geom_point(aes(size = mpg)) + labs(x = "", y = "", title = 'This is title', subtitle = 'This is subtitle') + guides(size = guide_legend(nrow = 1)) + theme( panel.border = element_blank(), legend.position = 'top', legend.justification = 'left', plot.title = element_text(size = 18, hjust = 0), # 让标题以绘图区(panel)为基准对齐,和图例参考系统一 plot.title.position = "panel", # 调整标题上下边距,避免与图例/绘图区重叠 plot.title.margin = margin(t = 15, b = 10, unit = "pt") )
原理说明
plot.title.position = "panel":默认标题以整个画布左边缘为基准,设置后改为以绘图区左边缘对齐,和图例的legend.justification = 'left'对齐基准完全统一。hjust = 0:确保标题完全左对齐,和图例左边缘精准对齐。plot.title.margin:调整标题的上下间距,让标题和图例、绘图区保持合适距离,避免拥挤。
方案2:将图例与标题统一到画布左上角对齐
如果希望标题和图例都以整个画布的左上角为基准对齐,可以通过调整图例的位置和外边距实现:
ggplot(mtcars, aes(wt, qsec)) + geom_point(aes(size = mpg)) + labs(x = "", y = "", title = 'This is title', subtitle = 'This is subtitle') + guides(size = guide_legend(nrow = 1)) + theme( panel.border = element_blank(), # 图例左上角对齐画布左上角 legend.position = c(0, 1), legend.justification = c(0, 1), # 调整图例上边距,将其移到标题下方 legend.box.margin = margin(t = 40, l = 0, b = 0, r = 0, unit = "pt"), # 标题左对齐 plot.title = element_text(size = 18, hjust = 0), # 扩展画布上边距,给标题和图例留出足够显示空间 plot.margin = margin(t = 60, r = 20, b = 20, l = 20, unit = "pt") )
原理说明
legend.position = c(0, 1)+legend.justification = c(0, 1):让图例的左上角和整个画布的左上角对齐,和标题的基准保持一致。legend.box.margin:通过上边距(t参数)将图例下移到标题下方,避免二者重叠。plot.margin:扩展画布的上边距,确保标题和图例不会被画布边缘截断。
内容的提问来源于stack exchange,提问作者laoba
相关产品推荐
相关产品推荐

