如何固定ggplot2图例位置使其始终位于左上角不受画布尺寸影响
ggplot2图例固定左上角不随画布尺寸偏移的解决方法
出现偏移的核心原因是仅设置legend.position时,默认使用图例中心点作为对齐锚点,且相对坐标未锚定到绘图区域的边缘,画布宽高比变化时相对位置的绝对映射就会发生偏移。你可以通过同时配置对齐锚点、边距参数实现需求:
修改后的完整代码
library(ggplot2) library(dplyr) set.seed(1) Dat = rbind(data.frame(var1 = 'x1', var2 = rnorm(1000, 10, 3)), data.frame(var1 = 'x2', var2 = rnorm(1000, -10, 5))) Dat %>% ggplot() + theme( # 对齐锚点设置:把图例的左上角,对准绘图区域的左上角 legend.position = c(0, 1), legend.justification = c(0, 1), # 设置图例和边缘的少量边距,单位为pt,可按需调整数值 legend.margin = margin(t = 5, r = 5, b = 5, l = 5, unit = "pt"), # 可选:给图例加白色背景避免和绘图内容重叠看不清 legend.background = element_rect(fill = "white", linewidth = 0.2, color = "grey") ) + geom_histogram(data = Dat, aes(x = var2, y = ..density.., fill = var1), position = "identity", alpha = 0.8)
参数说明
legend.position = c(0,1):x轴相对坐标0对应绘图区域最左侧,y轴相对坐标1对应绘图区域最顶部,指向绘图区域的左上角坐标legend.justification = c(0,1):指定图例自身的左上角作为对齐锚点,和上面的position坐标完全匹配,不会出现图例中心点对齐导致的偏移legend.margin:控制图例内部和边缘的间距,避免图例贴死绘图边界- 额外加的
alpha=0.8是让直方图半透明,提升两组数据重叠区域的可读性,不需要可以直接删除
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

