ggplot shape = Unicode (например, стрелки типа "\ u2198" или LaTeX \ searrow)? - PullRequest
0 голосов
/ 25 февраля 2019

Я хотел бы использовать формы Unicode в ggplot2 geom_point() (в частности, такие стрелки, как ↘, Unicode "\ u2198" или LaTeX \ searrow), как в shape = "\u2198", которые не являются шрифтом по умолчанию,В этом неотвеченном сообщении , @ Laserhedvig Комментарий"кажется, что проблема заключается в шрифте. По-видимому, базовые шрифты по умолчанию не содержат поддержку этих конкретных символов. Теперь, какизменить шрифт для аргумента формы geom_point ()? "

Это решение для Unicode в axes.text использует theme(axis.text.x = element_text(family = "FreeSerif")), а это решение использует theme(text=element_text(size=16, family="Comic Sans MS")) для всех text, но как я могу это сделать для shape?

  1. Есть ли общее решение использовать Unicode для shape?(Должен ли я как-то использовать cairo и / или аргумент шрифта family?)
  2. Если нет, есть ли какой-либо другой набор форм стрелок?(Мой поиск фигур и глифов, в том числе в документации scale_shape оказался пустым.)

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

Пример:

library(dplyr)
library(ggplot2)

d <- tibble(year = c(1, 1, 2, 2),
       policy = rep( c('policy 1', 'policy 2'), 2),
       prediction = c(NA, 'increase', 'decrease', NA),
       predictionUnicode = c(NA, '\u2197', '\u2198', NA))

ggplot(d) + 
  geom_point(aes(x = year, y = policy, color = prediction), shape = "\u2198")

shape = "\ u2198" (т.е. "↘") не работает

Редактировать: Благодаря комментарию djangodude об использовании шрифта ggplot я нашел аргумент family geom_text, который допускает использование разных шрифтов.Таким образом, «формы» Unicode могут отображаться как символы с geom_text.Тем не менее, легенда для geom_text является фиксированной на "a" темы управляют только отображением без данных , поэтому аргумент base_family не будет работать для shape.

ggplot(d) + 
  geom_tile( aes(x = year, y = policy), color = "black", fill = "white") +   
  # geom_point does not allow new fonts?
  geom_point(aes(x = year, y = policy, 
                 color = prediction), shape = "\u2198") + 
  # geom_text does allow new fonts, but the legend text is fixed to "a"
  geom_text(aes(x = year, y= policy, 
                color = prediction,
                label = predictionUnicode), 
            family = "Calibri") + 
  scale_x_continuous(breaks = c(1,2)) +
  theme_gray(base_family = "Calibri") 

geom_text отображает юникод, но не в легенде

Кажется, аргумент shape действительно правильный способ сделать это, верно?

Я пытался установить Sys.setenv(LANG = "en_US.UTF-8") и Sys.setenv(LANG = "Unicode") безрезультатно, но, возможно, некоторыенастройка глобального языка повлияет на shape?

Большое спасибо за любую помощь!

Примечание: Эти решения для Unicode череп и скрещенные кости и наполовину заполненные точки не имеют легенды и не будет работать без правильного шрифта:

Чтобы получить правильный шрифт:

  1. Найдите установленный шрифт, который содержит символ Unicode, который выискать.Я нашел эти инструкции полезными.

  2. Импорт установленных шрифтов в R

library(extrafont)
font_import()
fonts()
sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.3

1 Ответ

0 голосов
/ 25 февраля 2019

Используйте shape="\u2198" вместо \u8600.При указании символа с пометкой \u значение должно быть шестнадцатеричным.8600 - десятичное значение для символа Юникод LOWER RIGHT ARROW;шестнадцатеричное значение 2198.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...