在一个窗口中绘制不同大小的矩阵(在R中)

时间:2014-03-17 14:42:30

标签: r matrix ggplot2 levelplot

我正在尝试创建颜色矩阵,以说明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函数执行此操作。然而,我唯一可以理解的方法是打印每个单独的级别图,这会为每个图表生成一个颜色键和标题(不是我想要的)。

1 个答案:

答案 0 :(得分:0)

这是你在寻找什么?

您可以在调用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"))