“facet_grid”和overplot:令人费解的行为

时间:2016-11-07 17:16:58

标签: r plot facet-grid

我正在使用facet_grid()绘制一些数据,我注意到一些令人费解的事情。

我预计我是ggplot库的初学者,我可能错过了一些东西。无论如何,这就是它。

假设以下数据帧:

library(ggplot2)

d1 <- runif(500)
d2 <- runif(500)*10
s1 <- sample(LETTERS[1:2], 500, replace = T, prob=c(0.3, 0.7))
s2 <- sample(letters[3:4], 500, replace = T, prob=c(0.4, 0.6))
df <- data.frame(s1, s2, d1, d2)

看起来像这样:

s2 s1 d1        d2
c  B  0.3434944 0.9881925
d  A  0.7847741 9.7759946
d  A  0.3142764 2.3654268
...

我绘制数据,以便根据分类值对其进行排序:

ggplot(df, aes(x=df$d1, y=df$d2)) +
geom_point(col="red", cex=2) +
facet_grid(d2 ~ d1)

导致以下情节:

Plot 1

我现在只想过度绘制数据的一个子集,并使用了以下(此处简化的)代码:

geom_point(data=df[df$d2 > 7.5,],
aes(x=df$d1[df$d2 > 7.5], y=df$d2[df$d2 > 7.5]),
cex=1, colour=I("black"))

导致以下情节:

Plot 2

现在,在设定了一个门槛之后,我希望所有的值,比如“大于阈值”都被绘制成预先存在的值。

情况似乎并非如此。

实际上,某些预先存在的值没有匹配的阈值。此外,某些阈值不具有匹配的预先存在的值。让我最困惑的是,我的理解是,数据点来自同一个数据帧,我希望第一层(预先存在的层)包含第二层。我在这里错过了什么吗?

此外,如果仔细观察,绘制的点与正确的2D位置匹配,尽管它们位于错误的象限中。

更令人费解的是:如果我绘制以下子集:

ggplot(df[df$d2 < 7.5,], aes(x=df$d1[df$d2 < 7.5], y=df$d2[df$d2 < 7.5])) +
geom_point(col="red", cex=2) +
facet_grid(d2 ~ d1) +
geom_point(data=df[df$d2 > 7.5,], aes(x=df$d1[df$d2 > 7.5], y=df$d2[df$d2 > 7.5]), cex=1, colour=I("black"))

一些预先存在的值从“高于阈值”的区域移动到“低于阈值”的区域。任何人都可以解释这种行为吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我无法准确解释为什么你的问题,但我认为你在情节函数中的subsets没有认识到这个方面。通过在T/F中创建新的dataframe列,我们可以控制每个facet的颜色和大小。这有什么用吗?

编辑使用空心点shape=21scale_fill_manual来准确解决问题。

df$d<-df$d2>7.5

ggplot(data=df, aes(x=d1, y=d2,colour=d,size=d,fill=d))+
    facet_grid(s1~s2)+
    geom_point(show.legend=F,shape=21,size=2,stroke=1.5,col="red")+
    scale_fill_manual(values=setNames(c('black','red'),c(T,F)))

enter image description here