【问题标题】:How do I facet by geom / layer in ggplot2?如何在 ggplot2 中按 geom / layer 进行分面?
【发布时间】:2019-05-23 17:18:36
【问题描述】:

我希望使用 ggplot 的 facet_grid 重新创建下面的 gridExtra 输出,但我不确定 ggplot 与图中的图层标识的变量是什么。在这个例子中,有两个 geom...

require(tidyverse)

a <- ggplot(mpg)
b <- geom_point(aes(displ, cyl, color = drv))
c <- geom_smooth(aes(displ, cyl, color = drv))
d <- a + b + c

# output below
gridExtra::grid.arrange(
  a + b,
  a + c,
  ncol = 2
) 

# Equivalent with gg's facet_grid
# needs a categorical var to iter over...
d$layers
#d + facet_grid(. ~ d$layers??)

我希望重新创建的 gridExtra 输出是:

【问题讨论】:

  • Faceting 设计用于“小倍数”,即不同数据子集的同一图的多个副本。对于您想要的,grid.arrange 是正确的工具。
  • “我同意,但我不同意”似乎你不同意......你试图制作相同数据的不同图,而不是不同(子集)数据的相同图
  • 同意@Gregor 所说的。我了解将两个相关图表并排放置的用例,例如 R4DS 示例,但这些不是通过刻面完成的。为什么不使用正确的工具来完成正确的工作? patchwork 是一个 ggplot 布局包,如果您担心的话,它不会向您的环境添加超过几个功能。您甚至可以仅根据 ggplot2 负载(大量)的包来装配经典的 multiplot 之类的东西
  • 顺便说一句:small multiples 不是指绘图或层数,而是在数据的某些方面发生变化的情况下重复复制同一图表的技术,例如已完成具有方面功能
  • 没有人说这没有用,或者不要这样做,当然也没有人说这将是一个绝对不应该成为ggplot2 的一部分的可怕功能。我们是说构面/小倍数有一个非常清晰的定义(嵌入到它们的实现方式中),并且这是不同的。如果ggplot 提供一种方法可能会很好并排对齐不同的图,但它并没有,并且许多其他软件包已经介入以不同的方式提供该功能。

标签: r ggplot2 facet-wrap facet-grid


【解决方案1】:

执行此操作的一种巧妙方法是获取现有数据框并创建两个、三个所需数量的数据框副本,并带有一个链接到它的值,以便稍后用于构面和过滤。将数据帧联合(或 rbind)合并为一个数据帧。然后设置 ggplot 和 geoms 并过滤每个 geom 以获得所需的属性。同样对于构面,使用现有属性来分割图。

这可以在下面看到:

df1 <- data.frame(
      graph = "point_plot",
      mpg
    )
df2 <- data.frame(
    graph = "spline_plot",
    mpg
  )

df <- rbind(df1, df2)

ggplot(df, mapping = aes(x = displ, y = hwy, color = class)) +
  geom_point(data = filter(df, graph == "point_plot")) +
  geom_smooth(data = filter(df, graph == "spline_plot"), se=FALSE) +
  facet_grid(. ~ graph)

【讨论】:

    【解决方案2】:

    如果您真的想在不同的方面显示不同的图,一种巧妙的方法是制作数据的单独副本并将其子集...

    mpg2 <- mpg %>% mutate(facet = 1) %>%
      bind_rows(mpg %>% mutate(facet = 2))
    
    ggplot(mpg2, aes(displ, cyl, color = drv)) +
      geom_point(data = subset(mpg2, facet == 1)) +
      geom_smooth(data = subset(mpg2, facet == 2)) +
      facet_wrap(~facet)
    

    【讨论】:

      猜你喜欢
      • 2012-05-08
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 2021-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多