Как создать график svg с полужирным шрифтом в R ggpot2?

Я пытаюсь создать граф, содержащий полужирные метки, используя ggplot2. Проблема в том, что любой текст ggplot2 имеет только 4 типа начертания: обычный, полужирный, курсив, полужирный курсив. Так что полужирного здесь нет. Встроенный драйвер записи svg, используемый ggplot2, может обрабатывать шрифты, зарегистрированные с определенным весом. В моем случае это «Джорджия Про Полуболд». НО сохранение такого графика работает только через UI в RStudio и не работает через ggsave. Возникает вопрос: как решить эту проблему с ggsave?

Подготовка данных:

      library(ggplot2)
library(Cairo)
library(c)
library(extrafont)
library(svglite)

extrafont::loadfonts(device="win")

setwd("path")

p_2016 <- data.frame(read.csv("E3005.20211208T011244.csv"))

p_2016_state = dplyr::filter(p_2016, Towns.by.Size == "State", Sex != "Both sexes", Age.Group!="All ages")

p_2016_state$VALUE <- ifelse(p_2016_state$Sex == "Male", -1*p_2016_state$VALUE, p_2016_state$VALUE)

p_2016_state$PERCENT = p_2016_state$VALUE/sum(p_2016_state$VALUE)*100

p_2016_rural = dplyr::filter(p_2016, Towns.by.Size == "Remainder of country", Sex != "Both sexes", Age.Group!="All ages")

Сюжет:

      g <- ggplot(p_2016_state, aes(x=Age.Group, y=VALUE, label=abs(VALUE), fill=Sex)) +
    geom_col() + 
    scale_y_continuous(labels = paste0(as.character(c(seq(2, 0, -1), seq(1, 2, 1))), "m")) +
    ggtitle("Age and Sex Distribution") + ylab("Percent of population") + xlab("Age Group") +
    geom_text(family="Bahnschrift", size = 8/.pt) + 
    theme_bw() + theme(legend.position = "none") + 
    # important code is only here:
    theme(plot.title = element_text(hjust = 0.5), text = element_text(family = 'Georgia Pro Semibold')) +
    coord_flip()
g

Изображение, полученное из стандартной вкладки «графики» в RStudio с помощью кнопки «Экспорт» (сохранено в svg, прикреплено как png)

Но потом

      ggsave("pyramid.svg", g, device="svg", width=175.438, height=103.475, units="mm", dpi=600)

Заменяет полужирный шрифт Georgia Pro на Arial. Он работает нормально с Georgia Pro, но не с Georgia Pro Semibold

Похоже, что библиотека svglite, которая используется в ggsave, так как устройство не может обрабатывать некоторые типы шрифтов. Есть ли способы исправить?

UPD: драйвер ggsave png с этим справляется отлично. Но мне нужен svg для моей цели

ссылка на данные: https://data.cso.ie/table/E3005 Но, очевидно, может быть воспроизведена даже с одной меткой в ​​пустом графике.

0 ответов

Другие вопросы по тегам