【问题标题】:Plotting matrices of different sizes in one window (in R)在一个窗口中绘制不同大小的矩阵(在 R 中)
【发布时间】:2014-03-17 14:42:29
【问题描述】:

我正在尝试创建颜色矩阵来说明 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"))

有什么更好的方法可以在一个窗口中生成我需要的图而不需要所有不必要的空白?请注意,我最初尝试使用 lattice 包中的 levelplot 函数来执行此操作。但是,我能想到的唯一方法是打印每个单独的关卡图,这会为每个图生成一个颜色键和标题(不是我想要的)。

【问题讨论】:

    标签: r matrix ggplot2 levelplot


    【解决方案1】:

    这就是你要找的吗??

    您可以在对facet_wrap(...) 的调用中使用scales="free_y" 删除空白空间。这会强制每个 facet 拥有自己的 y 轴,但不会强制在每个 facet 上显示单独的 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"))
    

    【讨论】:

    • 这就是我要找的。非常感谢!虽然我将如何更改每个方面的大小以使它们与变量的数量成比例...例如,包含 15 个变量的方面会大于包含 7、9 和 11 个变量的方面?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多