ggsave () не выделяет текст и меняет шрифт всего текста вместо простого заголовка - PullRequest
0 голосов
/ 19 сентября 2018

Я создаю диаграмму в 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().

enter image description here

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

enter image description here

Я хочу 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
)

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

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Здесь я также даю решение 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"
        )
    )

enter image description here

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

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

0 голосов
/ 19 сентября 2018

Это работало на моей машине 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)

enter image description here

...