полужирный шрифт меток, содержащих выражение с меньшим или равным символом

Мне нужно выделить жирным шрифтом метки легенды графика. Одна из меток представляет собой выражение, содержащее знак меньше или равно.

Вот откуда я начал:

library(ggplot2)

df <- data.frame(x=factor(rep(0:1, 10)), y=rnorm(10), z=factor(rep(0:1, 10)))

ggplot(df, aes(x, y, shape=z)) +
geom_point() +
scale_shape_discrete(labels=c("Age > 65", expression(Age <= 65))) +
theme(legend.text=element_text(face="bold"))

Таким образом, первая метка выделена жирным шрифтом, а вторая — нет. Следуя предложению здесь, я попытался использовать plotmath bold():

library(ggplot2)

df <- data.frame(x=factor(rep(0:1, 10)), y=rnorm(10), z=factor(rep(0:1, 10)))

ggplot(aes(x, y, shape=z)) +
geom_point() +
scale_shape_discrete(labels=c("Age > 65", expression(bold(Age <= 65)))) +
theme(legend.text=element_text(face="bold"))

Метка выделена жирным шрифтом только до знака ‹=. Я также попытался поместить вторую часть строки в полужирный():

expression(bold(Age bold(<= 65)))

но безрезультатно. Любая помощь приветствуется.


person Claudio    schedule 29.07.2020    source источник


Ответы (2)


В документации plotmath спрятано следующее:

Обратите внимание, что жирный шрифт, курсив и полужирный курсив не применяются к символам и, следовательно, не применяются к греческим символам, таким как мю, которые отображаются шрифтом символов. Они также не применяются к числовым константам.

Вместо этого предлагается использовать юникод (при условии поддержки шрифтов и устройств), что в данном случае означает, что мы можем вообще обойтись без plotmath.

ggplot(df, aes(x, y, shape=z)) +
  geom_point() +
  scale_shape_discrete(labels=c("Age > 65", "Age \U2264 65")) +
  theme(legend.text=element_text(face="bold"))
person 27 ϕ 9    schedule 29.07.2020

Хотя это немного излишне для этой конкретной проблемы, пакет ggtext усложняет метки в ggplot2 намного проще. Это позволяет использовать синтаксис Markdown и HTML для рендеринга текста.

Вот один из способов написания текстовых меток легенды, используя Markdown ** для жирного шрифта и HTML &le; для символа.

library(ggtext)

ggplot(df, aes(x, y, shape=z)) +
     geom_point() +
     scale_shape_discrete(labels=c("**Age > 65**", "**Age &le; 65**")) +
     theme(legend.text=element_markdown())

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

(Я работаю на компьютере с Windows, и графическое устройство Windows по умолчанию может иметь проблемы с добавлением дополнительных пробелов к символам. Использование ragg::agg_png() позволяет избежать проблемы при сохранении графиков, но также следующая версия RStudio позволит вам измените графический интерфейс, чтобы обойти эти проблемы.)

person aosmith    schedule 29.07.2020