如何调整plot_grid()中图标签与坐标轴标签的间距以避免重叠
如何调整plot_grid()中图标签与坐标轴标签的间距以避免重叠
首先先帮你修正一下代码里的小语法错误,不然运行会报错哦:
library(ggplot2) library(cowplot) country <- c("United Kingdom", "Germany", "Poland", "Spain", "Portugal", "France") x <- as.numeric(c(13.4,25.1,10,15,12.1,21.8)) y <- as.numeric(c(124,112,176,124,109,143)) df <- data.frame(country, x,y) # 修正p1的theme语法错误 p1 <- ggplot(data=df)+ geom_bar(aes(x=country,y=x),stat="identity")+ coord_flip()+ ylab("x")+ theme(text=element_text(size=20), panel.background = element_blank()) # 修正p2的theme语法错误 p2 <- ggplot(data=df)+ geom_bar(aes(x=country,y=y),stat="identity")+ coord_flip()+ ylab("y")+ theme(text=element_text(size=20), panel.background = element_blank()) plot_grid(p1,p2,align = "vh",labels = c("(a)","(b)"),label_size=19)
接下来解决标签重叠的问题,这里有几个实用的办法:
方法1:调整plot_grid的标签位置参数
plot_grid里的label_x和label_y可以控制标签的位置,因为你的图用了coord_flip(),标签默认在左上角,和左侧的轴标签重叠,你可以把标签往左侧(x轴负方向)移动一点,比如设置label_x = -0.1,同时可以微调label_y让位置更舒服:
plot_grid(p1,p2,align = "vh",labels = c("(a)","(b)"),label_size=19, label_x = -0.1, label_y = 1.02)
label_x的取值范围可以超出0-1,负数就是往图的外侧移动,这样就能避开轴标签了。
方法2:给每个ggplot添加左侧边距
在每个图的theme里设置plot.margin,给左侧留出足够的空间放置标签,比如:
# 修改p1的theme,增加左侧边距 p1 <- ggplot(data=df)+ geom_bar(aes(x=country,y=x),stat="identity")+ coord_flip()+ ylab("x")+ theme(text=element_text(size=20), panel.background = element_blank(), plot.margin = margin(5,5,5,20, unit = "pt")) # 左 margin 设为20pt # 同样修改p2 p2 <- ggplot(data=df)+ geom_bar(aes(x=country,y=y),stat="identity")+ coord_flip()+ ylab("y")+ theme(text=element_text(size=20), panel.background = element_blank(), plot.margin = margin(5,5,5,20, unit = "pt")) plot_grid(p1,p2,align = "vh",labels = c("(a)","(b)"),label_size=19)
这里的margin参数顺序是上、右、下、左,你可以根据实际情况调整左侧的数值,直到标签和轴标签不重叠为止。
方法3:调整标签的对齐方式
还可以用label.hjust参数调整标签的水平对齐,比如设置label.hjust = 1.1,让标签向右对齐并稍微偏移,不过这个方法适合微调,配合前面的方法一起用效果更好:
plot_grid(p1,p2,align = "vh",labels = c("(a)","(b)"),label_size=19, label.hjust = 1.1)
你可以根据自己的图的实际情况选择其中一种或者组合几种方法,都能解决重叠的问题~
备注:内容来源于stack exchange,提问作者Gonzalo de Quesada
相关产品推荐
相关产品推荐

