ggsave() не выделяет текст и меняет шрифт всего текста вместо простого заголовка

Я делаю диаграмму в ggplot2 и ggsave() не делает то, что я ожидаю.

require(ggplot2)
require(showtext)

showtext_auto()
hedFont <- "Pragati Narrow"
font_add_google(
  name = hedFont,
  family = hedFont,
  regular.wt = 400,
  bold.wt = 700
)

chart <- ggplot(
  data = cars,
  aes(
    x = speed,
    y = dist
  )
) +
  geom_point() +
  labs(
    title = "Here is a title",
    subtitle = "Subtitle here"
  ) +
  theme(
    plot.title = element_text(
      size = 20,
      family = hedFont,
      face = "bold"
    ),
    axis.title = element_text(
      face = "bold"
    )
  )

ggsave(
  filename = "myplot",
  plot = chart,
  device = "png",
  path = "~/Desktop",
  width = 300,
  height = 200,
  units = "mm",
  dpi = 72
)

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

Вот что я вижу в программе просмотра RStudio, когда запускаю ggplot() код в нем.

Вот что ggsave() производит.

я хочу ggsave() создать диаграмму, в которой шрифт имеет только заголовок диаграммы, а заголовки осей выделены жирным шрифтом.

ОБНОВЛЕНИЕ: я попробовал предложение Тунга. Я загрузил Google Font на свой компьютер. Вот мой новый код.

font_import(
  paths = "/usr/share/fonts/truetype/google-fonts/",
  recursive = T,
  prompt = F,
  pattern = "Pragati"
)
loadfonts(device = "pdf")
loadfonts(device = "postscript")

myFont <- "Pragati Narrow"

chart <- ggplot(
  data = cars,
  aes(
    x = speed,
    y = dist
  )
) +
  geom_point() +
  labs(
    title = "Here is a title",
    subtitle = "Subtitle here"
  ) +
  theme(
    plot.title = element_text(
      size = 20,
      family = myFont,
      face = "bold"
    ),
    axis.title = element_text(
      face = "bold"
    )
  )

ggsave(
  filename = "myplot2.png",
  plot = chart,
  device = "png",
  path = "~/Desktop",
  width = 300,
  height = 200,
  units = "mm",
  dpi = 72
)

Кажется, ничего не изменилось.

Я не вижу ошибок или предупреждений в консоли RStudio.

3 ответа

Решение

Это работало на моей машине Linux Mint Rosa. Вам необходимо скачать и импортировать нужный шрифт в extrafont база данных за этот ответ

library(extrafont)
library(ggplot2)

hedFont <- "BitstreamVeraSansMono"

chart <- ggplot(
  data = cars,
  aes(
    x = speed,
    y = dist
  )
) +
  geom_point() +
  labs(
    title = "Here is a title",
    subtitle = "Subtitle here"
  ) +
  theme(
    plot.title = element_text(
      size = 20,
      family = hedFont,
      face = "bold"
    ),
    axis.title = element_text(
      face = "bold"
    )
  )
chart

ggsave(
  filename = "./output/myplot.png",
  plot = chart,
  type = "cairo",
  height = 4,
  width = 6,
  dpi = 150)

У меня была аналогичная проблема с использованием пакета, где указанный шрифт отображался в средстве просмотра RStudio, но менялся при сохранении в виде файла. .pngс ggsave(). Ни один из приведенных выше ответов не работал у меня (шрифт уже был сохранен в моем extrafontбазу данных и указать base_familyне работал).

Я смог заставить его работать, просто удалив raggпакет с использованием installr::uninstall.packages("ragg").

Я не знаю, почему это работает, если у кого-нибудь есть какие-либо объяснения этому, мне было бы интересно услышать.

Здесь я также даю решение showtext.

Короткая версия: добавить theme_grey(base_family = "sans") к ggplot заявление, а ниже - результат, как и ожидалось.

chart <- ggplot(data = cars, aes(x = speed, y = dist)) +
    geom_point() +
    labs(title = "Here is a title", subtitle = "Subtitle here") +
    theme_grey(base_family = "sans") +
    theme(
        plot.title = element_text(
            size = 20,
            family = hedFont,
            face = "bold"
        ),
        axis.title = element_text(
            face = "bold"
        )
    )

Длинная версия: когда базовое семейство не указано в ggplot, showtext по умолчанию используется семейство шрифтов WenQuanYi MicroHei для поддержки символов CJK. Однако в этом семействе нет шрифта, выделенного жирным шрифтом, поэтому в исходном коде заголовок оси отображался обычным шрифтом. Я бы предложил всегда устанавливать par(family = "sans") на базовых участках и theme_grey(base_family = "sans") в ggplot участки.

Как примечание стороны, это не означает, что showtext не может использоваться внутри RStudio. Ты можешь позвонить x11() или так, чтобы открыть окно и showtext должно хорошо с ним работать.

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