我有一个带有两个标签的ggplot图。我想在我的情节上添加两个标签,垂直对齐。我想在第一个标签下方绘制第二个标签,但它们不应重叠。
因此,如果我想在(20,90)处绘制第一个标签,第二个标签应该放在哪里?显然,它取决于数据集的y轴和第一个标签所需的高度。
问:坐标是硬编码的(请参阅我的脚本),并且无法使用新数据集。我想提出一种方法,使得两个标签始终垂直对齐任何数据集和缩放。我的潜在解决方案是:
Line1\nLine2
tableGrob
包中的gridExtra
。我不知道如何使 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)
答案 0 :(得分:4)
你可以尝试这样的事情,
library(gridExtra)
library(grid)
table_label <- function(label, params=list()) {
params <- modifyList(list(hjust=0, x=0), params)
mytheme <- ttheme_minimal(padding=unit(c(1, 1), "mm"),core = list(fg_params = params), parse=TRUE)
disect <- strsplit(label, "\\n")[[1]]
m <- as.matrix(disect)
tableGrob(m, theme=mytheme)
}
txt <- 'italic(y) == 1.7 + 1 * italic(x) * "," ~~italic(r)^2 ~ "=" ~ 0.91\n
italic(y) == 9.7 + 1 * italic(x) * "," ~~italic(r)^2 ~ "=" ~ 9.91'
library(ggplot2)
qplot(1:10,1:10) +
annotation_custom(table_label(txt), xmin=0, xmax=5, ymin=7.5)
答案 1 :(得分:2)
尝试使用cowplot
包,它会为您提供功能draw_label
,可让您添加具有相对定位的图层:
library(ggplot2)
library(cowplot)
data <- data.frame(x = 1:100, y = (1:100) + rnorm(100))
p <- ggplot(data = data,
aes(x = x,
y = y)) +
geom_point()
ggdraw(p) +
draw_label(expression(paste(italic(y) == 1.7 + 1 * italic(x),
", ",
italic(r)^2 == 0.91)),
.2, .9) +
draw_label(expression(paste(italic(y) == 9.7 + 1 * italic(x),
", ",
italic(r)^2 == 9.91)),
.2, .83)
答案 2 :(得分:1)