Векторизация сцепленной текстовой метки для сюжета - PullRequest
0 голосов
/ 23 сентября 2018

Я хотел бы добавить несколько текстовых меток к графику, состоящему из выражения, которое выделяет курсив, и вектора значений (сохраненного во фрейме данных).

Я могу сделать этоработать только с одним значением, используя (например) следующий код:

plot.new()
axis(1)
axis(2)

text( c(0.5, 0.5), c(0.8, 0.4), 
expression(paste(italic(P),"-trend =", 0.01)) )

enter image description here

Однако мне не удается выполнить эту работу, когдазаменив 0.01 на вектор значений.Например, следующий

plot.new()
axis(1)
axis(2)

text( c(0.5, 0.5), c(0.8, 0.4), 
expression(paste(italic(P),"-trend =", c(0.01, 0.001))) )

не дает правильный вектор меток, но это:

enter image description here

Поскольку векторвнутри expression().Как я мог сделать эту работу?Я не обладаю знаниями в этой конкретной области, и, возможно, я упустил более очевидный способ сделать это.

Аналогичный вопрос был опубликован здесь , но мне не удалось его экстраполироватьв моем случае.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

@ Решение Эвана работает отлично, но благодаря его ответу и другим, найденным на SO, мне удалось векторизовать его с sapply(), устраняя необходимость в цикле for.

plot.new()
axis(1)
axis(2)

plabs <- function(x) as.expression(bquote(italic(P)~ "-trend =" ~ .(x) ))
text(c(0.5, 0.5), c(0.8, 0.4), labels = sapply(c(0.01, 0.001), plabs))

Это также приводит кжелаемый результат.

0 голосов
/ 23 сентября 2018

Вы можете поменять expression на bquote, который по-разному использует italic и позволяет использовать .() для оценки объекта.Я обнаружил это использование здесь .Затем я использую цикл for в качестве обходного пути для желаемой векторизованной функциональности.

plot.new(); axis(1); axis(2)

txt <- list(x = c(0.5, 0.5), y = c(0.8, 0.4), vals = c(0.01, 0.001))

for(i in 1:length(txt$vals)){
  text(x = txt$x[i], 
       y = txt$y[i], 
       labels = bquote(paste(italic("P"), "-trend = ", .(txt$vals[i]))))
}

example plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...