Аннотировать ggplot сюжет с многострочным выражением с объектами? - PullRequest
0 голосов
/ 04 июня 2018

Я хотел бы сделать аннотацию на моем ggplot с двумя строками, под- и надстрочными индексами и ссылками на объекты.

Я понял, что функция annotate() вызывает geom_text(), которая приparse = TRUE может использовать выражения из plotmath.

Если это мой ярлык:

q10 = 1.9
a = 3.9
b = -0.05

lab1 = substitute(atop(paste(Q[10], '=', q10), paste(M[O[2]], '=', a, e^(b*T))), list(q10 = q10 = 1.9, a = 3.9, b = -0.05))

Тогда он будет работать с базовым сюжетом:

plot(1, 1, main = lab1)

enter image description here

Но когда я пытаюсь использовать его с ggplot(), выдается ошибка:

ggplot(diamonds, aes(carat, price, color = cut)) + 
  geom_point() +
  annotate(geom = 'text', x = 4, y = 5000, label = lab1, parse = TRUE, color = 'blue')

Error: Aesthetics must be either length 1 or the same as the data (1): label, colour

Я нашел вопросы, связанные с многострочными аннотациями в ggplot: R ggplot аннотирован поверх, используя три значения и bgoup

и относится к выражениям в ggplot: ggplot2 аннотация с верхними индексами

Но я не могу понятьузнать, как объединить соответствующие ответы, чтобы сделать рабочую аннотацию.Любая помощь от ggplot2 гуру там?

1 Ответ

0 голосов
/ 04 июня 2018

Чтобы использовать plotmath с ggplot, вы передаете его как строку - parse = TRUE относится к разбору строки.Таким образом:

library(ggplot2)

ggplot(diamonds, aes(carat, price, color = cut)) + 
    geom_point() +
    annotate(geom = 'text', x = 4, y = 5000, 
             label = "atop(Q[10] == 1.9,M[O[2]] == 3.9*e^(-0.05*T))", 
             parse = TRUE, color = 'blue')

Если вам нужно подставить в строку, используйте paste или glue::glue.

...