Как использовать семейство пользовательских шрифтов на графиках UpsetR? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь создать заданный график с использованием пакета UpSetR ; Тем не менее, я хотел бы контролировать семейство шрифтов. Идеальным подходом было бы использование функции theme из ggplot2, но в данный момент это не поддерживается UpSetR (с GitHub здесь есть открытая проблема с 2016 года), что приводит к NULL.

Пример создания тестового графика:

# R version ---------------------------------------------------------------
# platform       x86_64-w64-mingw32          
# arch           x86_64                      
# os             mingw32                     
# system         x86_64, mingw32             
# status                                     
# major          3                           
# minor          5.1                         
# year           2018                        
# month          07                          
# day            02                          
# svn rev        74947                       
# language       R                           
# version.string R version 3.5.1 (2018-07-02)
# nickname       Feather Spray 

# Package versions --------------------------------------------------------
# Assumes packages are already installed
packageVersion(pkg = "extrafont") == "0.17"
packageVersion(pkg = "UpSetR") == "1.3.3"
packageVersion(pkg = "ggplot2") == "3.1.0"

# Load UpSetR -------------------------------------------------------------
library(UpSetR)
library(extrafont)
library(ggplot2)

# Example -----------------------------------------------------------------
movies <- read.csv( system.file("extdata", "movies.csv", package = "UpSetR"), header=T, sep=";" )

upset(data = movies, 
      order.by = "freq", 
      keep.order = TRUE,
      mainbar.y.label = "Example plot", 
      point.size = 4, 
      line.size = 1,
      sets.x.label = NULL)

В дальнейшем идеальным вариантом будет ситуация, когда UpSetR поддерживает слои / + theme() функция из ggplot2; однако UpSetR не может использовать «+» «имя слоя» logi c. Например, если + theme(text = element_text(family = "Times New Roman")) было добавлено в конце вызова выше, оно вернуло бы NULL и не дало бы никакого графика.

Можете ли вы предложить какой-либо обходной путь (или настройку функции в пакете), который бы поддержка пользовательских шрифтов в приведенном выше примере графика, созданного UpSetR? В качестве альтернативы, есть ли способ принудительно установить семейство шрифтов по умолчанию на всех графиках без указания каких-либо family аргументов вручную?

1 Ответ

2 голосов
/ 13 марта 2020

Один из способов достижения этого с помощью другой реализации UpSet будет:

# install if needed
if(!require(ggplot2movies)) install.packages('ggplot2movies')
if(!require(devtools)) install.packages('devtools')
devtools::install_github('krassowski/complex-upset')

movies = as.data.frame(ggplot2movies::movies)
genres = c('Action', 'Animation', 'Comedy', 'Drama', 'Documentary', 'Romance', 'Short')

library(ComplexUpset)
library(ggplot2)

upset(
    movies, genres, min_size=45, width_ratio=0.1,
    themes=upset_default_themes(text=element_text(family='Times New Roman'))
)

Upset with Times New Roman

Отказ от ответственности: Я являюсь Автор этой реализации.

...