【问题标题】:Can you specify different geoms for different facets in a ggplot?您可以为 ggplot 中的不同方面指定不同的几何吗?
【发布时间】:2011-12-15 18:44:25
【问题描述】:

如何为 ggplot 中的不同方面指定不同的几何?

(代表@pacomet 询问,wanted to know。)

【问题讨论】:

  • 感谢 Richie 的提问

标签: r ggplot2


【解决方案1】:

这里有一些包含 5 个组的示例数据 (g)。我们希望在第五个方面使用不同的几何类型。请注意创建两个不同版本的 y 变量的技巧,一个用于前四个方面,一个用于第五个方面。

dfr <- data.frame(
  x = rep.int(1:10, 5),
  y = runif(50),
  g = gl(5, 10)
)
dfr$is.5 <- dfr$g == "5"
dfr$y.5 <- with(dfr, ifelse(is.5, y, NA)) 
dfr$y.not.5 <- with(dfr, ifelse(is.5, NA, y))

如果不同的几何图形可以使用相同的美学(如点和线),那么这不是问题。

(p1 <- ggplot(dfr) +
  geom_line(aes(x, y.not.5)) +
  geom_point(aes(x, y.5)) +
  facet_grid(g ~ .)
)

但是,折线图和条形图需要不同的方面,因此它们不能按预期协同工作。

(p2 <- ggplot(dfr) +
  geom_line(aes(x, y.not.5)) +
  geom_bar(aes(y.5)) +
  facet_grid(g ~ .)
)

在这种情况下,最好绘制两个单独的图表,然后将它们与Viewport 结合起来。

【讨论】:

    【解决方案2】:

    这是另一种通过子集化数据的方法:

    ggplot(mtcars, aes(mpg, disp)) + facet_wrap(~cyl) + 
      geom_point(data = subset(mtcars, cyl == 4)) +
      geom_line(data = subset(mtcars, cyl == 6)) +
      geom_text(data = subset(mtcars, cyl == 8), aes(label = gear))
    

    【讨论】:

    • 您可以通过使用subset = .(cyl == 4) 而不是使用data 调用来稍微简化代码。
    • 函数 . 来自包 plyr 但我认为它不再起作用了
    • ggplot 的最新版本中的替代方法是使用 data = ~subset(.x, cyl == 4)
    猜你喜欢
    • 2019-09-28
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多