ggsave()不会加粗文本,它会更改所有文本的字体而不仅仅是标题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()代码时。

enter image description here

这是ggsave()产生的。

enter image description here

我希望ggsave()制作一个图表,其中只有图表的标题有字体,轴的标题是粗体。

更新:我试过董的建议。我将Google字体下载到了我的电脑上。这是我的新代码。

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

答案

这适用于我的Linux Mint Rosa机器。您需要按照此extrafont下载并导入所需的字体到answer数据库

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

另一答案

在这里我也给出了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应该可以正常使用它。

以上是关于ggsave()不会加粗文本,它会更改所有文本的字体而不仅仅是标题的主要内容,如果未能解决你的问题,请参考以下文章

除非从 NetBeans 运行,否则 Java Canvas drawString 不会加粗文本

ggtext 格式被 ggsave 搞砸了

如果设置了较长的文本,则Textview宽度不会更改

悬停时更改 SVG 填充和文本突出显示颜色

在文本框中使单词加粗

The usage of Markdown---文字强调:加粗/斜体/文本高亮/删除线/下划线/按键效果