【发布时间】:2016-09-30 05:42:29
【问题描述】:
我有一个带有两个标签的 ggplot 图。我想将两个标签都添加到我的绘图中,垂直对齐。我希望在第一个标签下方绘制第二个标签,但它们不应重叠。
那么如果我想在 (20,90) 处绘制第一个标签,那么第二个标签应该去哪里呢?显然,它取决于数据集的y轴和第一个标签所需的高度。
问:坐标是硬编码的(参见我的脚本),不适用于新数据集。我想想出一种方法,使两个标签始终垂直对齐以进行 any 数据集和缩放。我的潜在解决方案是:
- 创建一个显示两行的标签,例如
Line1\nLine2 - 使用布局算法强制对齐,例如
gridExtra包中的tableGrob。
我不知道如何使 1 工作。在 2 中,我不确定如何使 tableGrob 与单个标签一起使用。最简单的解决方案是什么?
library(ggplot2)
data <- data.frame(x=c(1:100), y=x+rnorm(100))
p <- ggplot(data=data, aes_string(x='data$x', y='data$y')) + geom_point()
str1 <- "italic(y) == \"1.7\" + \"1\" * italic(x) * \",\" ~ ~italic(r)^2 ~ \"=\" ~ \"0.91\""
str2 <- "italic(y) == \"9.7\" + \"1\" * italic(x) * \",\" ~ ~italic(r)^2 ~ \"=\" ~ \"9.91\""
above <- annotate("text",
label=str1,
x=20,
y=90,
parse=TRUE)
below <- annotate("text",
label=str2,
x=20,
y=83,
parse=TRUE)
p <- p + above
p <- p + below
print(p)
【问题讨论】:
-
这里不相关,但
aes_string(x='data$x', y='data$y')是个坏主意。请改用aes(x=x, y=y) -
@baptiste 谢谢。但我现在的首要任务是定位标签...