1
假設我做了四次測量/實驗(M1..M4),產生在5個位置上變化的強度值(loc_1 ... 5)。我觀察了各種元素(n = 7)。現在我想使用ggplot2的facet_grid和geom_raster將結果彙總到一個圖中。我結束了下圖(見圖)。當在ggplot2中使用facet_grid和geom_raster時填充行
現在的問題是是否有一個簡單的解決方案來強制行填充每個面的空間(即在每個面板中放置未使用的行)。
謝謝
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)
感謝吉榮回答。我不想介紹NA(對不起,如果不清楚)。這個想法是爲具有非NA值的行提供不同的高度,以便填充整個子面板。或者我會對一些垂直縮小子面板的方式感興趣,以便只顯示非NA值的行。我知道這有點奇怪,因爲行應該指向每個班級中的相同元素。不過,我有隱藏的行名,因爲在我的情況中,我只是有興趣對M1..M4中的第1 ... 7類元素的強度有全局感覺。 – user451460
順便說一句,謝謝你的完整功能,我猜可能會非常有幫助。 – user451460
不客氣,我明白你的意思了。答案已更新。 –