【问题标题】:R plots: Corrupted/missing characters for devices other than pdfR图:pdf以外的设备的损坏/丢失字符
【发布时间】:2020-01-18 00:49:49
【问题描述】:

我遇到了一些图形设备打印缺少的字形框而不是字符的问题。实际上,到目前为止,我尝试过的唯一呈现字符的设备是 PDF。由于我最近更新了 R 并重建了一堆包,我怀疑这可能与它有关。这是与jpegpdfsvgpng 四个设备比较输出的屏幕截图。

虽然我第一次在 Rstudio 中使用 rcorr 包遇到问题,但当我从命令行作为 Rscript 并使用基本箱线图运行时会出现问题。

require(corrplot)
M<-cor(mtcars)
corrplot(M, method="circle")
dev.off()
pdf("test2.pdf")
corrplot(M, method="circle")
dev.off()
png("test2.png")
corrplot(M, method="circle")
dev.off()
jpeg("test2.jpeg")
corrplot(M, method="circle")
dev.off()
svg("test2.svg")
corrplot(M, method="circle")
dev.off()

pdf("test3.pdf")
boxplot(M, method="circle")
dev.off()
png("test3.png")
boxplot(M, method="circle")
dev.off()
jpeg("test3.jpeg")
boxplot(M, method="circle")
dev.off()
svg("test3.svg")
boxplot(M, method="circle")
dev.off()


会话信息:


> sessionInfo()
R version 3.6.2 (2019-12-12)
Platform: x86_64-generic-linux-gnu (64-bit)
Running under: Clear Linux OS

Matrix products: default
BLAS/LAPACK: /usr/lib64/libopenblas_nehalemp-r0.3.7.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8   
 [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] showtext_0.7     showtextdb_2.0   sysfonts_0.8     cairoDevice_2.28 corrplot_0.84   

loaded via a namespace (and not attached):
[1] compiler_3.6.2 tools_3.6.2   

输出:

【问题讨论】:

  • 您能否将sessionInfo() 的结果添加到您的问题中
  • @user20650,已添加 sessionInfo。

标签: r plot character-encoding missing-symbols


【解决方案1】:

R 和系统上的字体之间可能存在问题。检查 Helvetica 系列使用的字体 R。我遇到了同样的问题,并且能够通过删除字体包(来自 Arch Linux 的 AUR 的 adobe-base-14-fonts)来解决它。

另一个对我有用的解决方案是使用来自cairoDeviceCairo_png 函数。问题在于它不能修复 RStudio 中的 Plots 选项卡。

您可以编辑/添加 ~/.config/fontconfig/fonts.conf 以包含别名部分,这是一个示例:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias binding="same">
  <family>Helvetica</family>
  <prefer>
    <family>Nimbus Sans</family>
  </prefer>
</alias>
</fontconfig>

使用 Nimbus Sans、Arial 或任何其他 metric-compatible 字体。这可能会影响尝试在您的系统上使用 Helvetica 的其他程序,但您至少可以看看这是否真的是问题所在。

【讨论】:

  • 我如何知道 R 使用的是哪种字体?这是特定于每个图形设备还是全局?
  • Cairo_png 确实对我有用,但我希望能够在绘图窗格中看到我在做什么。
  • 尝试加载 Cairo 并运行 CairoFontMatch(fontpattern="Helvetica")。我不确定这是否始终与 PNG 设备使用的字体相同。
  • 输出1. family: "Helvetica", style: "Regular", file: "/usr/share/fonts/X11/75dpi/helvR12-ISO8859-1.pcf.gz" ...现在我如何知道问题设备正在使用哪个字体文件?
  • 这看起来像 Xorg 字体,我不会尝试卸载它。
【解决方案2】:

您是否运行BiocManager::valid() 以确保所有软件包都是最新的?这可能会解决不兼容问题。

【讨论】:

  • 这是一条评论
  • OK,然后:运行 BiocManager::valid() 以确保所有包都是最新的
  • 我确实有一些过时的 Bioconductor 软件包,但是重建它们并没有帮助。不过我猜我是 Bioconductor 用户。
【解决方案3】:

我在 R-studio 中遇到了同样的问题,堆栈溢出的一些线程建议安装 helvetica、缺少字体库或更改字体配置文件等。

对我有用的是从 R studio Tools -Global Options - Appearance 中选择一种字体。在这种情况下,我选择了 ubuntu mono 然后在我的一个 R 工作室脚本中,我只运行了这一行(我在 diff.thread 中找到了),我所有的情节都开始工作了,我什至不必将它添加到其他脚本中:

par(family ="Ubuntu Mono")

而且我不需要更改任何其他内容。

*(我通过 Anaconda 环境使用 Ubuntu 20.4 和 R Studio 1.1.456)

【讨论】:

    【解决方案4】:

    升级到 R 4.1 后我遇到了类似的问题。以下对我有用:

    1. 安装“ragg”包及其依赖项
    2. 在“工具”菜单中,打开“全局选项”
    3. 在“常规”部分中选择“图形”选项卡
    4. 选择“AGG”后端

    您可能需要重新启动 R 会话才能使其生效

    干杯。

    【讨论】:

      猜你喜欢
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 2012-02-16
      相关资源
      最近更新 更多