3

我正在 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()制作一个图表,其中只有图表的标题有字体,轴的标题是粗体的。

更新:我尝试了 Tung 的建议。我把谷歌字体下载到我的电脑上。这是我的新代码。

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 控制台中看到任何错误或警告。

4

3 回答 3

1

这适用于我的 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)

在此处输入图像描述

于 2018-09-19T00:14:16.853 回答
1

这里我也给出了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"
        )
    )

在此处输入图像描述

长版: 中未指定基本字体时ggplotshowtext默认使用“文泉易微黑”字体系列,以支持 CJK 字符。但是,该系列没有粗体字体,因此在您的原始代码中,轴标题以常规字体显示。我建议始终设置par(family = "sans")在基本地块和地块theme_grey(base_family = "sans")ggplot

作为旁注,这并不意味着showtext不能在 RStudio 中使用。您可以打电话x11()或类似的方式打开一个窗口,并且showtext应该可以很好地使用它。

于 2018-10-12T19:16:40.173 回答
0

我在使用这个包时遇到了类似的问题extrafont,我指定的字体会显示在 RStudio 查看器中,但是当我保存为.pngwith时会发生变化ggsave()。以上答案都不适合我(字体已经保存在我的extrafont数据库中并指定base_family不起作用)。

我只需ragg使用installr::uninstall.packages("ragg").

我不知道为什么会这样,如果有人对此有任何解释,我很想听听。

于 2021-10-10T00:29:58.020 回答