ggplot с настроенным шрифтом не отображается должным образом на 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"))
Это выглядит как:
Больше на предмете например здесь и здесь
Я также могу интегрировать этот сюжет и 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, я получаю сообщение об ошибке:
Приложение не удалось запустить (выход с кодом 1).
Регистрация шрифтов с помощью R Сканирование файлов ttf в www... Извлечение файлов.afm из файлов.ttf... /srv/connect/apps/21-comic-font/www/comici.ttfWarnung в gzfile(dest, "w") kann komprimierte Datei '/opt/R/3.4.3/lib/R/library/extrafontdb/metrics/comici.afm.gz' nicht öffnen. Грунд евтл. "Отказано в доступе" Фелер в значении [3L]: kann Verbindung nicht öffnen Ruft auf: local ... tryCatch -> tryCatchList -> tryCatchOne -> Ausführung angehalten
Я попытался решить это, включив ответ отсюда. Я добавил свой .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. Так что кажется, что мой шрифт загружен. Но сюжет не показывает правильный шрифт.
Это почему? И как я могу это решить?
1 ответ
Я нашел решение, которое, кажется, работает на shinyapps.io
(но не локально, поскольку это решение только для Linux. И почему-то оно не работало с моим оригинальным шрифтом 'ComicSans MS', но этот шрифт в любом случае не красивый..;-))
Вот так:
- Поместить пользовательский шрифт в
www
каталог: напримерIndieFlower.ttf
отсюда - Следуйте инструкциям отсюда
Это приводит к следующему 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)
Сюжет выглядит так: