【问题标题】:How can I force ggplot's geom_tile to fill every facet?如何强制 ggplot 的 geom_tile 填充每个方面?
【发布时间】:2011-08-09 19:20:58
【问题描述】:

我正在使用 ggplot 的 geom_tile 来绘制由一个因子刻面的二维密度图。每个 facet 的比例从所有数据的最小值到所有数据的最大值,但每个 facet 中的 geom_tile 仅扩展到在该 facet 中绘制的数据范围

演示问题的示例代码:

library(ggplot2)

data.unlimited <- data.frame(x=rnorm(500), y=rnorm(500))
data.limited <- subset(data.frame(x=rnorm(500), y=rnorm(500)), x<1 & y<1 & x>-1 & y>-1)

mydata <- rbind(data.frame(groupvar="unlimited", data.unlimited),
                data.frame(groupvar="limited", data.limited))

ggplot(mydata) +
  aes(x=x,y=y) +
  stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) +
  facet_wrap(~ groupvar)

运行代码,您将看到两个方面。一个方面显示了“无限”随机正态分布的密度图。第二个面显示了一个随机法线被截断以位于原点周围的 2x2 正方形内。 “有限”刻面中的 geom_tile 将被限制在这个小盒子内,而不是填充刻面。

last_plot() +
  scale_x_continuous(limits=c(-5,5)) + 
  scale_y_continuous(limits=c(-5,5))

最后三行绘制了具有指定 x 和 y 限制的相同数据,我们看到在这种情况下,没有一个面将切片部分延伸到边缘。

有什么办法可以强制每个facet中的geom_tile延伸到facet的全范围?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我认为您正在寻找scales = "free"expand = c(0,0) 的组合:

    ggplot(mydata) +
      aes(x=x,y=y) +
      stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) +
      facet_wrap(~ groupvar,scales = "free") + 
      scale_x_continuous(expand = c(0,0)) + 
      scale_y_continuous(expand = c(0,0))
    

    编辑

    鉴于 OP 的澄清,这里有一个选项,只需手动设置面板背景:

    ggplot(mydata) +
      aes(x=x,y=y) +
      stat_density2d(geom="tile", aes(fill = ..density..), contour = FALSE) +
      facet_wrap(~ groupvar) + 
      scale_fill_gradient(low = "blue", high = "red") + 
      opts(panel.background = theme_rect(fill = "blue"),panel.grid.major = theme_blank(),
           panel.grid.minor = theme_blank())
    

    【讨论】:

    • 不,我希望所有方面都具有相同的比例。基本上,我只想要有限边的 2x2 框外的纯蓝色,表示那里的密度为零。换句话说,我不希望比例缩小到数据的范围,我只想用 geom_tile 覆盖整个区域而不改变比例。
    • 在这种情况下,您最好手动设置面板背景。我会更新一个例子......
    • @Ryan - 您也可以查看 here 以获取其他选项,尽管我相信这是假设您手头有密度值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多