R ggplot: фоновое изображение, автоматически выбираемое из данных для создания нескольких графиков - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь создать отдельные графики («x» и «y» - координаты) с помощью мультикатегориальной переменной (user1) с несколькими строками («эмоция»).Однако на каждом графике должно быть одно из двух возможных фоновых изображений ("body_side"), и у некоторых пользователей есть оба ("g_back" / "g_front"), у других - только одно.В конце я хочу создать страницу с 6 графиками (2X3), в то время как графики одного и того же пользователя1 с разными фонами должны отображаться на одной странице.Моя главная проблема сейчас заключается в настройке правильного фона для каждого изображения.

Я использую ggplot с ggforce для построения нескольких графиков на одной странице, но не могу найти способ правильно определить фоновые изображения.

annotation_custom(paste0("g", unique(getElement(body_s1_s1, "body_side"))[1]),-Inf, Inf,-Inf, Inf) 

Aпримеры данных и изображения здесь https://drive.google.com/drive/u/0/folders/1dq2dbmgtT-SBmDaSfZBbgxdFqSZeCwx5. Мой текущий код:

img_front <- readJPEG("~/fr.jpg")
img_back <- readJPEG("~/bk.jpg")
g_back <- rasterGrob(img_back, height = 1, width = 1,interpolate = T )
g_front <- rasterGrob(img_front, height = 1, width = 1,interpolate = T )

load("~/body_s1_s1a.Rda")

pdf("~/mypdf.pdf", 7, 5)
for (i in seq(1, 1, 1)) {
 print(ggplot(data = body_s1_s1a, aes(color = as.factor(body_s1_s1$emotion))) + 
              xlim(1, 3700) + 
              ylim(1, 6500) +
              annotation_custom(paste0("g", unique(getElement(body_s1_s1, "body_side"))[1]),-Inf, Inf,-Inf, Inf) + 
              theme(panel.background = element_rect(fill = "lightblue", 
                                                    colour = "lightblue", 
                                                    size = 0.5, 
                                                    linetype = "solid")) +
              geom_path(aes_string(x = body_s1_s1$x, y = body_s1_s1$y), size = 1) + 
              coord_fixed(ratio = 1) +
              labs(x = "",y = "") + 
              scale_fill_gradientn(colours = rev(rainbow(10))) + 
              theme(legend.position = "top", legend.title = element_blank()) +
              facet_wrap_paginate(~user1*body_side, ncol = 3, nrow = 2, page = i) ) 
} 
dev.off()   
...