2017-03-24 2 views
1

5つの場所(loc_1〜5)に異なる輝度値を生成する4つの測定/実験(M1..M4)を行いました。私は様々なクラスの要素を観察した(n = 7)。今度は、結果をggplot2のfacet_gridとgeom_rasterを使用して1つの図にまとめます。私は下の図で終わります(画像参照)。ggplot2でfacet_gridとgeom_rasterを使用する場合の行の塗りつぶし

ここで問題になるのは、行が各ファセットのスペースを埋める(つまり、各パネル内の未使用の行を削除する)簡単な解決策があるかどうかです。あなたの目標はあなたがtidyrパッケージなどからcomplete機能を使用することができますposmesure, elements, classの不足しているすべての組み合わせについて、NA値(または他の何か)を導入し、する場合

rm(list=ls()) 
library(ggplot2) 
library(reshape2) 

set.seed(123) 

# let's create a fake dataset 
nb.mesure <- 4 
n.row <- 200 
n.col <- 5 
nb.class <- 7 


d <- matrix(round(runif(n.row * n.col),2), nc=n.col) 
colnames(d) <- sprintf("Loc_%02d", 1:5) 

# These strings will be the row names of each heatmap 
# in the subsequent facet plot 
elements <- sample(replicate(n.row/2, 1:100)) 

# let's create a data.frame d 
d <- data.frame(d, 
       mesure = sort(rep(c("M1","M2","M3", "M4"), n.row/4)), 
       elements= elements, 
       class=sample(nb.class, 
          length(elements), 
          rep=T, 
          prob = seq(0.01, 0.25, length.out=7)) 
          ) 



# Data are melt 
dm <- melt(d, id.var=c("mesure", "elements", "class")) 
colnames(dm) <- c("mesure","elements", "class", "pos", "intensity") 

# Plotting 
p <- ggplot(dm, aes(x = pos, y = elements, fill = intensity)) 
p <- p + geom_raster()           
p <- p + facet_grid(mesure~class , scales = "free", space="free_y") 
p <- p + theme_bw() 
p <- p + theme(text = element_text(size=8)) 
p <- p + theme(text = element_text(family = "mono", face = "bold")) 
p <- p + theme(axis.text.y = element_blank(), 
       axis.ticks.y=element_blank(), 
       axis.text.x = element_text(colour="grey20", 
              size=6,angle=45, 
             vjust = 0.3)) 
print(p) 

Example resul

答えて

1

ありがとうso:

library(tidyr) 

dm <- complete(dm, mesure, elements, class, pos, fill = list(intensity = NA)) 

enter image description here

場合

は、あなたが非NA値を持つようにしたいUPDATEを使用すると、facet_gridから離れるとfacet_wrapに切り替えて、各ファセットを埋めるために展開します。

p <- p + facet_wrap(mesure~class , scales = "free_y", nrow = 4) 

enter image description here

+0

感謝のJeroen答えるため。私はNAを導入したくありません(申し訳ありませんが、それは明らかではありません)。考え方は、NA以外の値を持つ行の高さを変えて、サブパネル全体を埋めるようにすることです。代わりに、いくつかのサブパネルを垂直方向に縮小し、非NA値の行だけが表示されるようにする方法に興味があります。私は行が各クラスの同じ要素を指しているはずなので少し奇妙であることを理解しています。しかし私は私の場合、M1..M4のクラス1 ... 7からの要素の強度についてグローバルな感覚を持つことに興味があるので、行の名前を隠しています。 – user451460

+0

ところで、私は非常に役立つと思われる完全な機能に感謝します。 – user451460

+0

あなたは歓迎です、私はあなたが今何を意味するかを見ます。答えが更新されます。 –

関連する問題