Как использовать собственное семейство шрифтов в графиках UpsetR?
Я пытаюсь создать заданный сюжет с помощью пакета UpSetR; однако я бы хотел контролировать семейство шрифтов. Идеальный подход - использоватьtheme
функция от ggplot2
но это не поддерживается на данный момент по UpSetR (есть открытый вопрос с 2016 года на GitHub здесь) и приводит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 не может использовать логику "+" "имя слоя". Например, если+ theme(text = element_text(family = "Times New Roman"))
были добавлены в конце вызова выше, он вернет NULL
и не производят сюжета.
Не могли бы вы предложить какой-либо обходной путь (или настройку функции в пакете), который поддерживал бы пользовательские шрифты в приведенном выше примере графика, созданном UpSetR? В качестве альтернативы, есть ли способ принудительно установить семейство шрифтов по умолчанию на всех графиках без указания каких-либоfamily
аргументы вручную?
1 ответ
Один из способов добиться этого с помощью другой реализации 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'))
)
Отказ от ответственности: я являюсь автором этой реализации.