Подтвердить что ты не робот

Подстрочные буквы в метке оси ggplot

Еще один график для публикации, еще один день прошел настройку в ggplot2... Я покачу? Я не уверен...

dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1]))

dat <- data.frame(x = rnorm(100), y = rnorm(100))
ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1d]))

Я пытаюсь выяснить, как иметь буквы подстроки в метке оси. Первый пример работает как просто число, как только у вас есть символ в квадратных скобках, он терпит неудачу. Бла [индекс (1d)] по существу то, что мне нужно, но я не могу понять, как заставить его дать мне буквы в индексе. Попробовали варианты, включая пасту() и т.д.

Конечно, чтобы добавить к разочарованию...

labs(y=expression(Blah[12])) - это работает

labs(y=expression(Blah[d])) - это работает

labs(y=expression(Blah[d1])) - это работает

labs(y=expression(Blah[1d])) - это не удается.

Мысли?

4b9b3361

Ответ 1

Я могу думать о двух лучших способах, чем использовать paste:

 ggplot(dat, aes(x=x,y=y)) +
     geom_point() +
     labs(y=expression(Blah[1*d]))
 ggplot(dat, aes(x=x,y=y)) +
     geom_point() +
     labs(y=expression(Blah["1d"]))

Токены (или "имена" или "символы" ) в R не должны начинаться с цифр. Таким образом, вы обходите это ограничение либо путем цитирования, либо путем разделения 1 и d не-пространственным разделителем, оператором *. Это "присоединяется" или "лигирует" чистый числовой литерал с легальным символом R или токеном.

Чтобы получить знак процента без подписки:

 ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1*d]*"%"))

Чтобы поставить parens вокруг знака pct:

expression(Blah[1*d]*"(%)")

Символ % имеет особое значение в R-синтаксическом разборе, поскольку он обозначает начало определяемого пользователем оператора инфикса. Поэтому, чтобы использовать его как литерал, его нужно процитировать.

Ответ 2

Хорошо. Я потел, я не публиковал это, просто чтобы ответить на него сам, несмотря на то, как быстро я его получил (всегда, когда вы задаете вопрос! Вот он:

ggplot(dat, aes(x=x,y=y)) +
    geom_point() +
    labs(y=expression(Blah[1][d]))

Думал, что лучше разместить пост, а не удалить вопрос, поскольку он может помочь кому-то еще в один прекрасный день.

"Блас" в стороне, я действительно хотел expression(paste("Hb", A[1][c]," (%)",sep=""))

Почему paste0() здесь не работает.