1

首先是一些玩具数据:

df = read.table(text = 
              "id      year    value sex  
1           2000    0   1
1           2001    1   0
1           2002    0   1
1           2003    0   0
2           2000    0   0
2           2002    0   0
2           2003    1   0
3           2002    0  1  
4           2000    0   0
4           2001    0   1
4           2002    1   0
4           2003    0   1 ", sep = "", header = TRUE)
  • 当我想通过 id 为 sex==1 可视化年份时,我会

    df2 <- df[df$sex==1,]
    p <- ggplot(df2, aes(y=id))
    p <- p + geom_point(aes(x=year))
    p
    

    如何从图中隐藏观察 2,以便每个剩余 id 之间的距离相同?当我的休息时间是 id 时,是否有一种通用方法如何调整 y 轴上两个刻度之间的距离?

  • 使用构面时,该解决方案是否也有效?

    p <- ggplot(df, aes(y=id))
    p <- p + geom_point(aes(x=year))
    p <- p + facet_grid(sex ~.)
    
4

1 回答 1

0

根据OP的澄清进行编辑

创建单独的图并使用gridExtra包。

我不确定这是否是您正在寻找的,但使用reorder()应该会有所帮助。只是为了测试它,我在您的玩具数据框中将“id”值 4 更改为 7。

要在单个绘图中删除级别,您可以创建 2 个绘图,然后将它们并排放置。

    df2 <- df[df$sex==1,]
p1 <- ggplot(df2, aes(y=(reorder(id, id))))
p1 <- p1 + geom_point(aes(x=year))
p1


df3 <- df[df$sex==0,]
p2 <- ggplot(df3, aes(y=(reorder(id, id))))
p2 <- p2 + geom_point(aes(x=year))

如果您注意到,没有数据的 id 将被删除。例如以下没有 id=2。 在此处输入图像描述

现在,您可以使用专门用于此目的的 gridExtra 包来打印出图 p1 和 p2。

require(gridExtra)
grid.arrange(p1, p2, ncol=2)

在此处输入图像描述

facet_grid() 按设计包含所有级别

直接使用 facet_grid 是行不通的,但这是设计使然。Facet_gripdrop=TRUE默认有。请注意,您没有看到 id's=5 或 6。如果一个 id 出现在任何一个面板中,它会包含在所有其他面板中以便于比较。

p <- ggplot(df, aes(y=reorder(id, id)))
p <- p + geom_point(aes(x=year))
p <- p + facet_grid(sex ~.)
p

在此处输入图像描述

于 2013-11-04T19:03:28.783 回答