Как использовать греческие символы в ggplot2?

103

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

ОБНОВЛЕНИЕ: я просмотрел ссылку , однако нет описанного хорошего метода для выполнения того, что я хочу сделать.

Сэм
источник
4
См. Обсуждение expressionфункции здесь: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway
Есть ли намек на получение viewportsиз ggplot2. Если это удастся сделать, я считаю, что изменение меток x-tic будет простым делом.
Sam
Вы можете использовать latex2expпакет: cran.r-project.org/web/packages/latex2exp/vignettes/…
Энрике Перес Эрреро,

Ответы:

152

Вот ссылка на отличную вики, в которой объясняется, как вставлять греческие символы в ggplot2. Итак, вот что нужно сделать, чтобы получить греческие символы.

  1. Текстовые метки: используйте parse = Tвнутри geom_textили annotate.
  2. Ярлыки осей: используйте expression(alpha)для получения греческой альфы.
  3. Этикетки фасетов: используйте labeller = label_parsedвнутри facet.
  4. Метки легенды: используйте bquote(alpha == .(value))в метках легенды.

Вы можете увидеть подробное использование этих опций по ссылке

РЕДАКТИРОВАТЬ. Использование греческих символов вдоль делений может быть достигнуто следующим образом.

require(ggplot2);
data(tips);
p0 = qplot(sex, data = tips, geom = 'bar');
p1 = p0 + scale_x_discrete(labels = c('Female' = expression(alpha),
                                      'Male'   = expression(beta)));
print(p1);

Для получения полной документации по различным символам, которые доступны при этом, и о том, как их использовать, см ?plotmath..

Рамнатх
источник
Я хочу, чтобы эти греческие символы отмечали тики. Я не уверен, что понимаю этот ответ. Я попробую и напишу ответ. Спасибо за направление.
Sam
По крайней мере, это не работает для моей цели. Спасибо за указатель.
Sam
@Sam, посмотрите пример кода в моей редакции. Вдоль делений на оси X отображаются греческие символы. Это то, что ты искал?
Ramnath
8
Я хотел бы добавить звездочку ('*') после греческой буквы. Кто-нибудь знает, как это сделать?
polarize
1
Недавно я узнал, что можно использовать другой вариант substitute, он также работает в тех местах, где expressionне работает, и даже допускает другое форматирование, например italics, boldи т. Д.
Сэм
41

Самое простое решение: используйте символы Unicode

Никаких expressionили других пакетов не требуется.
Не уверен, что это новая функция для ggplot, но она работает. Это также упрощает смешивание греческого и обычного текста (например, добавление «*» в галочки).

Просто используйте символы Юникода в текстовой строке. кажется, хорошо работает для всех возможных вариантов. Изменить: раньше это не работало в метках фасетов. Похоже, что в какой-то момент это было исправлено.

library(ggplot2)
ggplot(mtcars, 
       aes(mpg, disp, color=factor(gear))) + 
  geom_point() + 
  labs(title="Title (\u03b1 \u03a9)", # works fine
       x= "\u03b1 \u03a9 x-axis title",    # works fine
       y= "\u03b1 \u03a9 y-axis title",    # works fine
       color="\u03b1 \u03a9 Groups:") +  # works fine
  scale_x_continuous(breaks = seq(10, 35, 5), 
                     labels = paste0(seq(10, 35, 5), "\u03a9*")) + # works fine; to label the ticks
  ggrepel::geom_text_repel(aes(label = paste(rownames(mtcars), "\u03a9*")), size =3) + # works fine 
  facet_grid(~paste0(gear, " Gears \u03a9"))

Создано 28.08.2019 пакетом REPEX (v0.3.0)

Мэтт Л.
источник
4
Хороший ответ. Подробнее о символах Юникода см .: stackoverflow.com/questions/27690729/…
PatrickT
очень гибкий !!
Joaoal
2
Это лучший способ, потому что вы не занимаетесь типами объектов, образованными expressionили bquote- вы получаете объект-персонаж, который можно использовать любым другим способом, которым вы используете объекты-символы.
GMSL
1
Это не только самый простой метод, но и лучший, поскольку он работает в большинстве случаев и не полагается на другие функции.
Squeezie
Это генерирует много предупреждений, около сотни строк:Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : “conversion failure on '>3σ' in 'mbcsToSbcs': dot substituted for <cf>
Patafikss
37

Используйте expression(delta)where 'delta' для строчных букв δи 'Delta' для получения капитала Δ.

Вот полный список греческих символов:

Α альфа
Β β бета
Γ γ гамма
Δ δ дельта
Ε ε эпсилон
Ζ ζ дзета
Η η эта
Θ θ тета
Ι ι иота
Κ κ каппа
Λ λ лямбда
Μ μ mu
Ν ν nu
Ξ ξ xi
Ο ο омикрон
Π π pi
Ρ ρ rho
Σ σ сигма
Τ τ тау
Υ υ ипсилон
Φ φ phi
Χ χ chi
Ψ ψ psi
Ω ω омега

РЕДАКТИРОВАТЬ: скопировано из комментариев, при использовании в сочетании с другими словами, например:expression(Delta*"price")

Матас Вайткявичюс
источник
1
Как я могу поставить лайк Δprice? expression(Deltaprice)не работает, тоже не работаетexpression(Delta price)
jf328
2
Спасибо. Но как это именно? xlab(expression(Delta)price)выдает ошибку
jf328
3
выражение (Дельта * цена)
kennyB 08
Есть ли способ получить ипсилон в греческой (а не в латинской форме)? См. En.wikipedia.org/wiki/Upsilon Соответствие латинскому Y (я бы хотел что-то вроде третьего символа в en.wikipedia.org/wiki/Upsilon#/media/… )
Адриан
6
выражение (Дельта * "цена") работает. Не люблю синтаксис.
daknowles
16

Вам не нужен latex2expпакет, чтобы делать то, что вы хотели. Следующий код поможет.

ggplot(smr, aes(Fuel.Rate, Eng.Speed.Ave., color=Eng.Speed.Max.)) + 
  geom_point() + 
  labs(title=expression("Fuel Efficiency"~(alpha*Omega)), 
color=expression(alpha*Omega), x=expression(Delta~price))

введите описание изображения здесь

Кроме того, в некоторых комментариях (без ответа на данный момент) просили поставить звездочку (*) после греческой буквы. expression(alpha~"*")работает, поэтому я предлагаю попробовать.

Больше комментариев спрашивают о получении, Δ Priceи я считаю, что самый простой способ добиться этого - это expression(Delta~price)). Если вам нужно добавить что-то перед греческой буквой, вы также можете сделать это: expression(Indicative~Delta~price)что даст вам:

введите описание изображения здесь

толькофантом
источник