У меня есть график ggplot с двумя ярлыками. Я хочу добавить обе метки на свой сюжет, выровненный по вертикали. Я хочу, чтобы мой второй ярлык был нарисован ниже первого ярлыка, но они не должны перекрываться.Как использовать ggplot для выравнивания моих двух меток?
Итак, если я хочу нарисовать первый ярлык в (20,90), где должна быть вторая метка? Очевидно, это зависит от оси y набора данных и высоты, необходимой для первой метки.
Q: Координаты жестко закодированы (см мой сценарий) и не будет работать для нового набора данных. Я хочу придумать такой способ, чтобы две метки всегда выровнялись по вертикали для любого набора данных и масштабирования. Мои потенциальные решения:
- Создать одну метку, показывающую две линии, что-то вроде
Line1\nLine2
- Используйте алгоритм компоновки, чтобы заставить выравнивание, как
tableGrob
изgridExtra
пакета.
Я не знаю, как сделать работ. В , я не уверен, как сделать 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
@baptiste Спасибо. Но мой главный приоритет теперь позиционирует ярлыки ... – SmallChess