使用ggplot2对数据进行分层绘图

3
我面临以下问题。我设置了以下两个数据框:
x = c(1,2,3,4,1,2,3,4)
f = c(rep('a',4),rep('b',4))
y = c(2,4,5,6,9,4,2,10)
z = data.frame(x=x,f=f,y=y)

另一个数据框是什么。
x1 = c(2,2.5,3.1,2.8,3.4,3.5)
y1 = c(1,1.2,1,2,3,2)
f1 = c(rep('a',3),rep('b',3))
z1 = data.frame(x=x1,f=f1,y=y1)

我想要做的是基于f列来绘制第一个数据框z的分面图。这很容易实现。然而,我的第二个数据框表示了我想要在每个图中绘制两个三角形的坐标。我该如何使用图层来完成这个任务?我尝试了下面的方法,但没有成功。
p = ggplot() +
 layer(
 data=z,
 mapping = aes(x,y),
 geom="line"
) +
layer(
 data = z1,
 mapping = aes(x,y),
 geom="polygon",
 color="blue"
) +
facet_grid(f ~ .)

非常感谢您的关注和帮助。
1个回答

9
重要的是,你的 facets 在每个数据源中应该具有相同的列名:
设置数据。(我使用与您相同的数据,但请注意,您不需要预定义您的向量 - 只需在 data.frame 函数内部进行即可。这将减少工作区中的混乱:
library(ggplot2)
z <- data.frame(
  x = c(1,2,3,4,1,2,3,4),
  y = c(2,4,5,6,9,4,2,10),
  f = c(rep('a',4),rep('b',4))
)

z1 <- data.frame(
  x = c(2,2.5,3.1,2.8,3.4,3.5),
  y = c(1,1.2,1,2,3,2),
  f = c(rep('a',3),rep('b',3))
)

调用 ggplot 函数的方式与你原来的代码几乎相同。我只是省略了使用 layer,直接使用了 geoms,这样可以节省一些击键:

ggplot() +
    geom_line(data=z, aes(x,y)) +
    geom_polygon(data=z1, aes(x,y), color="blue") +
    facet_grid(f ~ .)

enter image description here


如果您认为这个答案回答了您的问题,可以将其标记为正确答案(小灰色勾选框,在分数下方变为绿色)。 - Roman Luštrik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接