在带有 png 输出的 ggplot2 中使用等宽字体作为轴标签

Car*_*rus 5 r ggplot2

我使用基因组数据来绘制三核苷酸的频率。我想用ggplot2生成png绘图,并且我在 Linux Centos 计算机上工作。如图所示,x.axis 标签未完全对齐,因为字母大小不同。我想使用等宽字体,所以我尝试使用“family”参数来修改主题,但这没有效果。我已经使用“extrafont”包看到并测试了许多答案,但没有结果,因为它似乎不适用于 png 输出。有没有一种简单的方法可以在 ggplot2 中使用等宽字体(例如 Courier),使用或不使用附加包?

在此输入图像描述

这是迄今为止我基于最小数据集的代码示例。

testData <- data.frame(freq = rnorm(10),
                       context = c("ACA","ACC","ACG","ACT","CCA",
                                   "CCC","CCG","CCT","GCA","GCC"))
a <- ggplot(testData, aes(x=context, y=freq)) + 
  geom_bar(stat="identity", width = 0.4, fill = "royalblue") + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5,
                                   size = 10, family = "mono"),
        axis.title.x=element_blank())
ggsave("test.png",
       plot=a,
       width=2, height=2,
       device = "png",
       dpi = 300,
       type = "cairo")
Run Code Online (Sandbox Code Playgroud)

Jan*_*yer 1

看来type = "cairo"inggsave()是造成问题的原因。

您的绘图代码是正确的,当我在 RStudio 绘图窗口中查看您的绘图时,我看到了您想要的等宽字体。然而,当您保存绘图时,等宽字体被另一种字体替换,大概是因为 cairo 有它自己的默认字体(您保存的绘图中的所有字体都是衬线字体,即使 ggplot 默认为无衬线字体并且您从未编辑过y 轴上的文本)。

我能够通过删除type = "cairo"来用等宽字体保存你的情节ggsave()

ggsave("test.png", plot = a, width = 2, height = 2, device = "png", dpi = 300)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述