我想在ggplot2中使用geom_tile和facet_grid设置x面板的自由比例(参见下图)。我使用for循环并在不同的视口中打印来创建此图。
是否有简单的方法来创建相似的数字?
感谢您的任何建议。
这是重新创建我的数字的示例代码。
df <- list(x = 1:5, y = 1:5, xp = 1:3, yp = 1:3)
df <- expand.grid(df)
df$z <- df$xp * 10 + runif(nrow(df))
library(RColorBrewer)
cols <- rev(brewer.pal(11, 'RdYlBu'))
library(ggplot2)
p <- ggplot(df)
p <- p + geom_tile(aes(x, y, fill = z))
p <- p + facet_grid(xp~yp)
p + scale_fill_gradientn(colours = cols)
xp <- unique(df$xp)
library(grid)
for (i in seq(along = xp))
{
df_i <- df[df$xp == xp[i],]
p <- ggplot(df_i)
p <- p + geom_tile(aes(x, y, fill = z))
p <- p + facet_grid(xp~yp)
p <- p + scale_fill_gradientn(colours = cols)
p <- p + theme(
plot.background = element_rect(fill = 'transparent', colour = 'transparent'),
strip.background = element_rect(fill = 'transparent', colour = 'transparent'),
axis.ticks = element_line(colour = 'transparent'))
p <- p + xlab('') + ylab('')
if (i > 1)
{
p <- p + theme(strip.text.x = element_text(colour = 'transparent'))
}
print(p, vp = viewport(0.5, 5/6 - (i - 1) * 0.28, 1, 0.4))
}