ggplot2:如何在轴标签上方添加倍数标注
在ggplot2中为坐标轴添加外部标注(提示刻度需乘以10^n)
针对轴刻度已除以10^n、需要在轴标签上方添加提示标注的需求,以下是几种实用的实现方法:
方法1:用annotation_custom结合grid::textGrob
通过关闭绘图区域裁剪,直接在外部添加标注,精准定位到轴标签上方:
library(ggplot2) library(grid) # 模拟数据:原始数值除以10^3 df <- data.frame(x = 1:10, y = (1:10)*1000/1000) p <- ggplot(df, aes(x, y)) + geom_point() + labs(y = "数值") + scale_y_continuous(breaks = seq(0,10,2)) # 添加y轴标签上方的标注 p + annotation_custom( grob = textGrob("(×10³)", gp = gpar(fontsize = 10)), xmin = -Inf, xmax = -Inf, ymin = 10.5, ymax = 10.5 # 调整y值控制垂直位置 ) + coord_cartesian(clip = "off") # 必须关闭裁剪,否则外部元素会被隐藏
方法2:直接整合标注到轴标签
最简单的方式是把提示信息直接融入轴标签,用上标格式更规范:
# 普通文本格式 ggplot(df, aes(x, y)) + geom_point() + labs(y = "数值 (×10³)") + scale_y_continuous(breaks = seq(0,10,2)) # 数学表达式上标格式 ggplot(df, aes(x, y)) + geom_point() + labs(y = expression(数值 ~ (times ~ 10^3))) + scale_y_continuous(breaks = seq(0,10,2))
方法3:用grid::grid.text在绘图后添加文本
适合需要更灵活定位的场景,先绘制图形再手动添加标注:
p <- ggplot(df, aes(x, y)) + geom_point() + labs(y = "数值") + scale_y_continuous(breaks = seq(0,10,2)) + theme(plot.margin = margin(5.5, 5.5, 5.5, 20)) # 左侧预留标注空间 # 绘制图形 print(p) # 添加垂直对齐的标注到y轴标签上方 grid.text("(×10³)", x = unit(0.05, "npc"), y = unit(0.5, "npc"), rot = 90)
内容的提问来源于stack exchange,提问作者Piotr Radziński
相关产品推荐
相关产品推荐

