1

背景和更新:我重写了这篇文章以反映最新发现(问题尚未解决)

使用 Azure 机器学习工作室运行“执行 R 脚本”任务。使用计算集群,它在运行管道后关闭(因此没有控制台访问,但可以将文件保存为日志以在关闭后查看)。环境是 Ubuntu,它加载的 R 版本是 3.5.1(会话信息)。我正在创建绘图png,然后将它们保存到 Excel 工作簿openxlsx中,最后在 Azure 文件存储中保存和检索它。此文件管理由azuremlsdk库完成

我遇到的问题是情节上的字符是“正方形”或“盒子”,也称为“字形”

png 导入到 excel 剪辑中

我提供了一个代码示例(尽管由于它需要 Azure,所以不能完全重现)来显示我正在运行的简单测试

library(ggplot2)
library(openxlsx)
imageName <- "testplot.png"
png(imageName)
plot(price ~ carat, data = diamonds, main = "Price vs Carat")
dev.off()
wb <- createWorkbook()
addWorksheet(wb, "testplotsheet", gridLines = TRUE)
insertImage(wb, "testplotsheet", imageName)
saveWorkbook(wb, file = xlName, overwrite = TRUE)

sessioninfo & 能力输出

R version 3.5.1 (2018-07-02)
Platform: x86_64-conda_cos6-linux-gnu (64-bit)
Running under: Ubuntu 18.04.6 LTS

Matrix products: default
BLAS: /azureml-envs/azureml_6ff64eff0a652bbe0bb1d84fc0884554/lib/R/lib/libRblas.so
LAPACK: /azureml-envs/azureml_6ff64eff0a652bbe0bb1d84fc0884554/lib/R/lib/libRlapack.so

locale:
 [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
 [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
 [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
[10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   

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

other attached packages:
[1] tibble_3.0.1      ggplot2_3.3.0     azuremlsdk_1.10.0 openxlsx_4.2.5   
[5] dplyr_0.8.5       jsonlite_1.6.1    reticulate_1.12  

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.8       magrittr_1.5     tidyselect_1.0.0 munsell_0.5.0   
 [5] colorspace_1.4-1 lattice_0.20-41  R6_2.4.1         rlang_1.0.1     
 [9] tools_3.5.1      grid_3.5.1       gtable_0.3.0     withr_2.2.0     
[13] ellipsis_0.3.0   assertthat_0.2.1 lifecycle_0.2.0  crayon_1.3.4    
[17] Matrix_1.2-18    zip_2.2.0        purrr_0.3.4      vctrs_0.2.4     
[21] glue_1.4.0       stringi_1.4.3    compiler_3.5.1   pillar_1.4.3    
[25] scales_1.1.0     pkgconfig_2.0.3 

          name value
1         jpeg  TRUE
2          png  TRUE
3         tiff  TRUE
4        tcltk  TRUE
5          X11 FALSE
6         aqua FALSE
7     http/ftp  TRUE
8      sockets  TRUE
9       libxml  TRUE
10        fifo  TRUE
11      cledit FALSE
12       iconv  TRUE
13         NLS  TRUE
14     profmem  TRUE
15       cairo  TRUE
16         ICU  TRUE
17 long.double  TRUE
18     libcurl  TRUE

来自 stackoverflow 上的另一篇文章:当文档中的 Unicode 字符与字体支持的字符不匹配时,会出现框。具体来说,这些框表示所选字体不支持的字符。

我尝试过的各种事情的结果:

Cairo: 无法安装,因为缺少“cairo.h”

par(family ="Ubuntu Mono")(按照建议运行后使用)没有png改变任何东西

Sys.setlocale("LC_ALL", 'en_US.UTF-8')(在 ms 论坛上建议)没有更改 LC 设置,但根据检查系统上的可用区域设置,似乎也不支持system("locale -a", intern = TRUE)

[1] "C"       "C.UTF-8" "POSIX"  

我看到了一个使用的建议iconv,但不知道如何将其合并到上面的代码中。我怎么能使用它或者它无关紧要?

这似乎很重要:

sysfonts没有安装,由于缺少zlib. 这也阻止了我安装showtext

  • png和其他图形设备依靠sysfonts在图像中创建字符?
  • 这就是为什么 in 等中的和family全局type设置或参数什么都不做的原因吗?plotpng

我想知道有没有可用的字体?font.families, font.files, font_families&font_files全为空白或错误

我确实设法*.ttf在系统上找到了一些文件(不在任何可识别的字体文件夹位置),所以我想也许我可以加载它们或强制 R 将它们用于png设备

extrafont试图用它来添加字体。但是因为font_import函数需要响应 ay/n 提示,所以不确定它是否加载。我保存了输出fonts()但空白,所以可能不是

  • 还有其他方法可以强制png使用这些ttf字体文件之一吗?

pdf这确实有效!我可以让字符显示保存相同的输出pdf,这是否使用自己的字体?这似乎意味着应该可以让字符显示在png

在这一点上,我正在查看我们的工程师是否可以访问不同的计算,因为所有这些问题似乎都源于过时/不适当的 R 和 Ubuntu 环境。但是,如果有任何其他想法可以显示这些字符,我欢迎提出建议!

4

0 回答 0