r ggplot динамически использует выражения plotmath

Я хочу динамически менять метки осей, используя ggplot. Приведенный ниже код представляет собой простую версию того, что я хотел бы сделать. Он правильно отображает символ градуса на оси y. Закомментированные строки кода ylab - это то, что я хотел бы сделать, но потерпел неудачу. Я хочу создать код графика, назначить его переменной (например, yLabel), а затем интерпретировать его с помощью ggplot.

library(data.table)
library(ggplot2)

DT <- data.table(timeStamp=c(1:12), ColN1=runif(12, 0, 10))
DT.long <- data.table::melt(
  DT, id.vars = c("timeStamp"))

yLabel <- "Temperature~(~degree~F)"
yLabel1 <- expression("Temperature~(~degree~F)")

p <- ggplot(data = DT.long, aes(x = timeStamp, y = value)) + 
  xlab("Time") + 
  #    ylab( expression(paste("Value is ", yLabel,","))) +
#  ylab(yLabel) +
#  ylab(yLabel1) +
  ylab(Temperature~(~degree~F)) +

    scale_y_continuous() +
  theme_bw() +
  geom_line()
print(p)

person JerryN    schedule 10.12.2017    source источник


Ответы (2)


Используйте 1_

Вот ваш динамический компонент

temp <- 12

Назначьте его метке, используя

ylab(bquote(Temperature ~is ~ .(temp) ~(degree~F)))

Или ответьте на дополнительный вопрос ниже

V = "Temperature is ("~degree~"F)"
W = "depth is ("~degree~"C)"

ggplot(data = DT.long, aes(x = timeStamp, y = value)) + 
  xlab("Time") +
  ylab(bquote(.(V)))

ggplot(data = DT.long, aes(x = timeStamp, y = value)) + 
  xlab("Time") +
  ylab(bquote(.(W)))
person B Williams    schedule 11.12.2017
comment
Это не помогает. Я хочу присвоить Temperature is... переменной (скажем, V), а затем использовать ylab(V). Я пробовал ylab(bquote(.V). Это не сработало. - person JerryN; 11.12.2017

У меня была такая же проблема с динамическим изменением метки оси, и ответ Б. Вильямса помог мне.

Решение:

dynamic <- "dynamic text"

# Put the dynamic text in its right context
str <- sprintf("Static label text [%s]", dynamic)

# Use multiplication "*" rather than "~" to build the expression to avoid unnecessary space 
complete_label <- bquote(.(str)[subscript]*"/L")

Чтобы убедиться, что это работает:

library(ggplot2)
ggplot() + labs(x = complete_label)
person Magnus    schedule 22.11.2019