在shinyapps.io上使用自定义字体

在shinyapps.io上使用自定义字体,shiny,shinyapps,Shiny,Shinyapps,我想在shinyapps.io上的闪亮应用程序(绘图)中使用自定义字体。我的Roboto-Regular.ttf在/www/目录中。这是我的app.R文件的上半部分: dir.create('~/.fonts') system("chmod +x ./www/Roboto-Regular.ttf") system("cp ./www/Roboto-Regular.ttf ~/.fonts/") system('fc-cache -f -v ~/.fonts/') system('fc-match

我想在shinyapps.io上的闪亮应用程序(绘图)中使用自定义字体。我的Roboto-Regular.ttf在
/www/
目录中。这是我的app.R文件的上半部分:

dir.create('~/.fonts')
system("chmod +x ./www/Roboto-Regular.ttf")
system("cp ./www/Roboto-Regular.ttf ~/.fonts/")
system('fc-cache -f -v ~/.fonts/')
system('fc-match Roboto')

library(ggplot2)
library(shiny)
library(shinythemes)

library(extrafont)
font_import(pattern="Roboto",prompt=FALSE)
loadfonts()
print(fonts())
部署应用程序时,我最终会出现如下错误:

Registering fonts with R
Scanning ttf files in /usr/share/fonts/, ~/.fonts/ ...
Extracting .afm files from .ttf files...
/home/shiny/.fonts/Roboto-Regular.ttfWarning in gzfile(dest, "w") :
  cannot open compressed file '/opt/R/3.5.1/lib/R/library/extrafontdb/metrics/Roboto-Regular.afm.gz', probable reason 'Permission denied'
Error in value[[3L]](cond) : cannot open the connection
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted
向R注册字体
正在扫描/usr/share/font/,~/.font/…中的ttf文件。。。
正在从.ttf文件中提取.afm文件。。。
/home/shinny/.fonts/Roboto-Regular.ttfWarning在gzfile中(dest,“w”):
无法打开压缩文件“/opt/R/3.5.1/lib/R/library/extrafontdb/metrics/Roboto Regular.afm.gz”,可能原因是“权限被拒绝”
值[[3L]](cond)中出错:无法打开连接
电话:本地。。。tryCatch->tryCatchList->tryCatchOne->
停止执行

有人看到什么地方出了问题吗?

这是我从RStudio那里得到的关于这个问题的答案。我自己还没有测试过

我们的开发人员之所以能够提出这一建议,是因为他们在创建extrafont和相关的extrafontdb包时做出了一个可能很不幸的设计选择。extrafont数据库存储在extrafontdb包目录中,这就是extrafontdb包的基本用途

这意味着extrafontdb目录需要是用户可写的。如果用户安装了该包,这将正常工作,但是如果root安装了该包(如在shinyapps.io上的情况),那么它将无法工作

一种可能的解决方法是将extrafontdb包安装到应用程序子目录中的库中

为此:创建一个
r-lib/
subdir,然后在那里下载extrafontdb源程序包:

dir.create('r-lib')
download.file('https://cran.r-project.org/src/contrib/extrafontdb_1.0.tar.gz','r-lib/extrafontdb_1.0.tar.gz')
部署时,应用程序将包括此
r-lib/
子目录和extrafontdb源程序包

然后,在应用程序顶部,将源程序包中的extrafontdb程序包安装到
r-lib
目录中

.libPaths(c('r-lib', .libPaths()))
install.packages('r-lib/extrafontdb_1.0.tar.gz',type = 'source',repos = NULL)
他们在shinyapps.io上部署了一个应用程序,可以安装extrafontdb,运行良好。libpath设置为
install.packages()
将从提供的源程序包安装到应用程序的
r-lib/
子目录

请让我们知道您是否能够实现上述功能或有任何其他问题


谢谢,

经过一番努力,我找到了一个更简单的解决方案,它适用于
shinyapps.io

我们开始:

  • 将自定义字体放在
    www
    目录中:例如
    IndieFlower.ttf
    from
  • 按照中的步骤进行操作
  • 这将导致
    app.R
    文件的以下上部:

    dir.create('~/.fonts')
    file.copy("www/IndieFlower.ttf", "~/.fonts")
    system('fc-cache -f ~/.fonts')
    
    由于Linux查找
    .font
    目录来搜索字体,因此不需要
    extrafont
    软件包,但可以直接使用以下字体:

    ggplot(mapping=aes(x=seq(1,10,.1), y=seq(1,10,.1))) +
          geom_line(position="jitter", color="red", size=2) + theme_bw() +
          theme(text=element_text(size = 16, family = "IndieFlower"))
    

    恢复一个旧主题,但使用自定义字体没有什么特别之处,只需将其添加到www文件夹,并创建CSS规则以应用于感兴趣的标记


    请查看详细信息。

    我遇到了同样的问题。你同时明白了吗?我已经添加了从RStudio得到的关于这个的回复。如果它工作,让我知道,我会接受它作为一个答案。谢谢张贴此。我想我走近了。。但对我来说还是不行。请看我的问题,非常感谢您的解决方案。这是我绘制带有日文标签的树形图所必需的步骤,因为treemap()函数似乎没有找到合适的字体来呈现日文字符。