Як використовувати грецькі символи в ggplot2?


101

Мої категорії потрібно назвати грецькими літерами. Я використовую ggplot2, і це прекрасно працює з даними. На жаль, я не можу зрозуміти, як розмістити ці грецькі символи на осі х (біля галочок), а також зробити так, щоб вони відображалися в легенді. Чи можна це зробити?

ОНОВЛЕННЯ: Я переглянув посилання , проте немає жодного хорошого методу, описаного для досягнення того, що я хочу зробити.


4
Дивіться обговорення expressionфункції тут: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway

Чи є підказка на отримання viewportsвід ggplot2. Якщо це вдасться зробити, я вважаю, що зміна знаків x-tic буде прямо вперед.
Сем

Ви можете використовувати latex2expпакет: cran.r-project.org/web/packages/latex2exp/vignettes/…
Enrique Pérez Herrero,

Відповіді:


152

Ось посилання на відмінну вікі, яка пояснює, як розмістити грецькі символи в ggplot2. Підводячи підсумок, ось що ви робите для отримання грецьких символів

  1. Текстові мітки: використовувати parse = Tвсередині geom_textабо annotate.
  2. Мітки осі: Використовуйте expression(alpha)для отримання грецької альфа.
  3. Фасетні ярлики: використовувати labeller = label_parsedвсередині facet.
  4. Етикетки легенд: Використовуйте bquote(alpha == .(value))в етикетці легенд.

Детальне використання цих параметрів ви можете побачити за посиланням

EDIT. Мета використання грецьких символів уздовж галочок може бути досягнута наступним чином

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, ознайомтеся з прикладом коду в моїй редакції. Він дає грецькі символи уздовж ваших галочок на осі x. Це те, що ви шукали?
Рамнат

8
Я хотів би додати зірочку ('*') після грецької літери. Хтось знає, як це зробити?
поляризуйте

1
Нещодавно я дізнався, що іншим варіантом є використання substitute, це також працює в місцях, де expressionне працює, і навіть дозволяє інші формати, наприклад italics, boldтощо.
Sam

40

Найпростіше рішення: Використовуйте символи Unicode

Ніяких expressionабо інших пакетів не потрібно.
Не впевнений, що це новіша функція для ggplot, але вона працює. Це також дозволяє легко змішувати грецький і звичайний текст (наприклад, додавання "*" до галочок)

Просто використовуйте символи unicode в текстовому рядку. здається, працює добре для всіх варіантів, про які я можу придумати. Редагувати: раніше це не працювало в гранях. Це, мабуть, було зафіксовано в якийсь момент.

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"))

Створено 2019-08-28 пакетом reprex (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)дельту для малих літер δта "Дельта", щоб отримати капітал Δ.

Ось повний список грецьких символів:

Α α альфа
Β β бета
Γ γ гамма
Δ δ дельта
Ε ε epsilon
Ζ ta zeta
Η η eta
Θ θ theta
Ι ι iota
Κ κ kappa
Λ λ lambda
Μ μ mu
Ν ν nu
Ξ ξ xi
Ο ο omicron
Π π pi
Ρ ρ rho
Σ σ sigma
Τ τ tau
Υ υ upsilon
Φ φ phi
Χ χ chi
Ψ ψ psi
Ω ω omega

EDIT: Скопійовано з коментарів при використанні спільно з іншими словами вживайте:expression(Delta*"price")


1
Як я можу отримати етикетку на зразок Δprice? expression(Deltaprice)не працює, також не працюєexpression(Delta price)
jf328

2
Дякую. Але як це саме? xlab(expression(Delta)price)дає помилку
jf328

3
вираз (Delta * ціна)
kennyB

Чи є спосіб отримати грецьку форму (на відміну від латинської форми) Upsilon? Дивіться en.wikipedia.org/wiki/Upsilon Листування з латині Y (я хотів би щось на зразок третього персонажа в en.wikipedia.org/wiki/Upsilon#/media/… )
Адріан

6
вираз (Delta * "ціна") працює. Не любить синтаксис.
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):

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.