ggsave 与非 ASCII plotmath 标签使用开罗

ggsave with non-ASCII plotmath labels using cairo

我有一个带有 plotmath 表达式的非 ASCII 轴标签。当我尝试使用 cairo 另存为 png 时,出现错误:

library(ggplot2)
ggsave("test.png",
       qplot(mtcars$hp, mtcars$cyl) +
         ylab(expression(`cÜl`~italic(r)(italic(M)))) +
         xlab(expression(hp~italic(hp))),
       device = grDevices::png,
       type = "cairo")

错误信息是:

Metric information not available for this family/device

另一方面,使用“windows”设备有效(警告除外):

ggsave("test.png",
       qplot(mtcars$hp, mtcars$cyl) +
         ylab(expression(`cÜl`~italic(r)(italic(M)))) +
         xlab(expression(hp~italic(hp))),
       device = grDevices::png,
       type = "windows")

警告(德语)是:

In dev(filename = filename, width = dim[1], height = dim[2], ...) :
  'width=7, height=7' sind unwahrscheinliche Pixelzahlen

最后,如果标签不是 plotmath 表达式,非 ASCII 轴标签本身不是问题:

ggsave("test.png",
       qplot(mtcars$hp, mtcars$cyl) +
         ylab("cÜl") +
         xlab(expression(hp~italic(hp))),
       device = grDevices::png,
       type = "cairo")

最后一条命令没有引发错误。

不过,我更愿意使用 cairo,因为它有时能画出更好的图片。有什么想法吗?

这对我有用(虽然我不在 windows);尝试省略 device 参数:

library(ggplot2)
ggsave("test.png",
       qplot(mtcars$hp, mtcars$cyl) +
           ylab(expression(`cÜl`~italic(r)(italic(M)))) +
           xlab(expression(hp~italic(hp))),
       type = "cairo-png")
#> Saving 7 x 5 in image

reprex package (v0.3.0)

于 2020-07-05 创建

这适用于装有 R 4.0.2 的 Windows 机器(以及 linux):

library(ggplot2)
library(ggtext)

ggsave("test.png", width = 6, height = 6,
       qplot(mtcars$hp, mtcars$cyl) +
           labs(x = "hp *hp*",
                y = "c\u00DCl *r*(*M*)") +
           theme(
               axis.title.x = element_markdown(),
               axis.title.y = element_markdown()
           ),
       type = "cairo-png")

reprex package (v0.3.0)

于 2020-07-07 创建