Отображение матриц разных размеров в одном окне (в R)

Я пытаюсь создать цветовые матрицы, чтобы проиллюстрировать изменение стандартизированных значений нескольких переменных за 25 лет. Я разделил переменные на несколько подкатегорий и хочу показать результаты для каждой подкатегории на разных графиках в одном окне с одним цветовым ключом и заголовком. Я попытался сделать это с помощью reshape и ggplot2, используя следующий код. Однако, поскольку каждая из категорий имеет разное количество переменных, на графиках остается много пустого места.

library(reshape)
library(ggplot2)

v1 <- replicate(7,rnorm(25))
v2 <- replicate(15, rnorm(25))
v3 <- replicate(11, rnorm(25))
v4 <- replicate(9, rnorm(25))
v5 <- replicate(9, rnorm(25))

v <- list(v1,v2,v3, v4, v5)

ggplot(melt(v), aes(x=X1, y=X2)) + facet_wrap(~ L1, ncol=1) +
geom_tile(aes(fill=value)) + ggtitle("Title") + 
theme(plot.title = element_text(lineheight=2, face="bold"))

Какой лучший способ создания графиков, которые мне нужны, в одном окне без ненужного пустого пространства? Обратите внимание, что изначально я пытался сделать это с помощью функции levelplot в пакете решетки. Тем не менее, единственный способ, которым я мог это понять, — это распечатать каждый отдельный график уровня, что дало цветовой ключ и заголовок для каждого графика (не то, что я хотел).


person user3429040    schedule 17.03.2014    source источник


Ответы (1)


Это то, что вы ищите??

Вы можете избавиться от пробела, используя scales="free_y" в вызове facet_wrap(...). Это заставляет каждую грань иметь собственную ось Y, но не заставляет отображать отдельную ось X на каждой грани. Я также добавил другую цветовую шкалу (уберите ее, если предпочитаете стандартную).

library(ggplot2)
library(reshape2)
library(RColorBrewer)

ggplot(melt(v), aes(x=X1, y=X2)) + 
  facet_wrap(~ L1, ncol=1,scales="free_y") +
  geom_tile(aes(fill=value)) + ggtitle("Title") + 
  scale_fill_gradientn(colours=rev(brewer.pal(9,"Spectral")))+
  theme(plot.title = element_text(lineheight=2, face="bold"))

person jlhoward    schedule 17.03.2014
comment
Это то, что я искал. Большое спасибо! Хотя как бы я изменил размер каждой грани, чтобы сделать их пропорциональными количеству переменных... например, грань, содержащая 15 переменных, будет больше, чем фасеты, содержащие 7, 9 и 11 переменных? - person user3429040; 18.03.2014