Подстрочные буквы в метке оси 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]))
- это не удается.
Мысли?
Ответы
Ответ 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()
здесь не работает.