带有自定义字体的 ggplot 在 shinyapps.io 上无法正确显示
ggplot with customized font not showing properly on shinyapps.io
我可以自定义 ggplot
中的字体:
library(extrafont)
windowsFonts()
font_import(pattern = "comic", prompt = FALSE)
loadfonts(device = "win")
windowsFonts()
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="Comic Sans MS"))
呈现为:
有关该主题的更多信息,例如 and here
我还可以将该绘图和 extrafont 集成到一个闪亮的应用程序中,该应用程序在本地运行如下:
library(ggplot2)
library(extrafont)
library(shiny)
font_import(paths = "www", pattern = "comic", prompt = FALSE)
loadfonts()
print(fonts())
ui <- fluidPage(plotOutput("plot"),textOutput("fonts"))
server <- function(input, output) {
output$plot <- renderPlot({
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="Comic Sans MS"))
})
output$fonts <- renderText(print(fonts()))
}
shinyApp(ui = ui, server = server)
但是,当我尝试将其部署到 shinyapps.io 时,出现错误:
The application failed to start (exited with code 1).
Registering fonts with R Scanning ttf files in www ... Extracting .afm
files from .ttf files...
/srv/connect/apps/21-comic-font/www/comici.ttfWarnung in gzfile(dest,
"w") kann komprimierte Datei
'/opt/R/3.4.3/lib/R/library/extrafontdb/metrics/comici.afm.gz' nicht
öffnen. Grund evtl. 'Permission denied' Fehler in value[3L] :
kann Verbindung nicht öffnen Ruft auf: local ... tryCatch ->
tryCatchList -> tryCatchOne -> Ausführung angehalten
我试图通过合并 here 的答案来解决这个问题。我将 .ttf
文件添加到 www
目录,并将 extrafontdb
包源添加到 r-lib
目录。 (当然我部署了两者......)。
完整的 app.R
文件现在看起来像:
.libPaths(c('r-lib', .libPaths()))
install.packages('r-lib/extrafontdb_1.0.tar.gz',type = 'source',repos = NULL)
library(ggplot2)
library(extrafontdb)
library(extrafont)
library(shiny)
font_import(paths = "www", pattern = "comic", prompt = FALSE)
loadfonts()
print(fonts())
ui <- fluidPage(plotOutput("plot"),textOutput("fonts"))
server <- function(input, output) {
output$plot <- renderPlot({
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="Comic Sans MS"))
})
output$fonts <- renderText(print(fonts()))
}
shinyApp(ui = ui, server = server)
当我部署它时,我得到一个 运行 应用程序和以下输出:
现在奇怪的是,renderText(print(fonts()))
打印出 Comic Sans MS。所以我的字体 似乎 已加载。但是绘图没有显示正确的字体。
这是为什么?我该如何解决?
我找到了一个似乎适用于 shinyapps.io
的解决方案(但不适用于本地,因为它是 Linux 唯一的解决方案。不知何故它不适用于我的原始解决方案'ComicSans MS'字体,反正那个字体不漂亮.. ;-))
我们开始:
这导致以下 app.R
文件:
ibrary(ggplot2)
library(shiny)
dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
ui <- fluidPage(plotOutput("plot"))
server <- function(input, output) {
output$plot <- renderPlot({
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"))
})
}
shinyApp(ui = ui, server = server)
情节看起来像:
我可以自定义 ggplot
中的字体:
library(extrafont)
windowsFonts()
font_import(pattern = "comic", prompt = FALSE)
loadfonts(device = "win")
windowsFonts()
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="Comic Sans MS"))
呈现为:
有关该主题的更多信息,例如
我还可以将该绘图和 extrafont 集成到一个闪亮的应用程序中,该应用程序在本地运行如下:
library(ggplot2)
library(extrafont)
library(shiny)
font_import(paths = "www", pattern = "comic", prompt = FALSE)
loadfonts()
print(fonts())
ui <- fluidPage(plotOutput("plot"),textOutput("fonts"))
server <- function(input, output) {
output$plot <- renderPlot({
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="Comic Sans MS"))
})
output$fonts <- renderText(print(fonts()))
}
shinyApp(ui = ui, server = server)
但是,当我尝试将其部署到 shinyapps.io 时,出现错误:
The application failed to start (exited with code 1).
Registering fonts with R Scanning ttf files in www ... Extracting .afm files from .ttf files... /srv/connect/apps/21-comic-font/www/comici.ttfWarnung in gzfile(dest, "w") kann komprimierte Datei '/opt/R/3.4.3/lib/R/library/extrafontdb/metrics/comici.afm.gz' nicht öffnen. Grund evtl. 'Permission denied' Fehler in value[3L] : kann Verbindung nicht öffnen Ruft auf: local ... tryCatch -> tryCatchList -> tryCatchOne -> Ausführung angehalten
我试图通过合并 here 的答案来解决这个问题。我将 .ttf
文件添加到 www
目录,并将 extrafontdb
包源添加到 r-lib
目录。 (当然我部署了两者......)。
完整的 app.R
文件现在看起来像:
.libPaths(c('r-lib', .libPaths()))
install.packages('r-lib/extrafontdb_1.0.tar.gz',type = 'source',repos = NULL)
library(ggplot2)
library(extrafontdb)
library(extrafont)
library(shiny)
font_import(paths = "www", pattern = "comic", prompt = FALSE)
loadfonts()
print(fonts())
ui <- fluidPage(plotOutput("plot"),textOutput("fonts"))
server <- function(input, output) {
output$plot <- renderPlot({
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="Comic Sans MS"))
})
output$fonts <- renderText(print(fonts()))
}
shinyApp(ui = ui, server = server)
当我部署它时,我得到一个 运行 应用程序和以下输出:
现在奇怪的是,renderText(print(fonts()))
打印出 Comic Sans MS。所以我的字体 似乎 已加载。但是绘图没有显示正确的字体。
这是为什么?我该如何解决?
我找到了一个似乎适用于 shinyapps.io
的解决方案(但不适用于本地,因为它是 Linux 唯一的解决方案。不知何故它不适用于我的原始解决方案'ComicSans MS'字体,反正那个字体不漂亮.. ;-))
我们开始:
这导致以下 app.R
文件:
ibrary(ggplot2)
library(shiny)
dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')
ui <- fluidPage(plotOutput("plot"))
server <- function(input, output) {
output$plot <- renderPlot({
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"))
})
}
shinyApp(ui = ui, server = server)
情节看起来像: