在水平轴散点图中为每个类别添加两行(ggplot2)

时间:2015-11-29 21:00:22

标签: r graph ggplot2

我有这个数据集:

workdataset <- data.frame(dadedu=rep(c("ISCED 1 & 2", "ISCED 3 & 4", "ISCED 5 & 6"),each=2),
                          socialorigin=rep(c(1,0),times=3),
                          Level = rep(c("Below ISCED 1", "ISCED 1", "ISCED 2", "ISCED 3", "ISCED 4","ISCED 5", "ISCED 6"), each=6),
                          Prob = rnorm(42))

我制作了这个情节:

ggplot(workdataset, aes(x = Level, y = Prob, colour = dadedu)) +
        geom_point(aes(group=dadedu, size=0.2)) + geom_line()

正如您在水平轴的每个类别中所看到的,有两个相同颜色的点通过一条线连接。而不是那样,我试图为每个类别设置两条线,例如,两个红点都用一条线连接,依此类推其他颜色。然后,通过不同的点形状区分类别中的两条线。

我一直在玩facet_grid,但我对ggplot2还不太熟悉,我似乎无法绕过它。

感谢任何帮助。

谢谢,

编辑: 对不起,我没有正确解释自己,但我会再试一次。因此,您可以在图中看到水平轴上有几个类别(ISCED 1,ISCED 2等)。对于每个类别,现在有一个包含6个点(2个红色,2个绿色和2个蓝色)的垂直线。 1红色属于socialorigin = 1而另一个红色等于社会原点= 0.我想要的是,而不是一条带有6个点的垂直线,两条垂直线,每条线有3个点。因此,一条垂直线将是socialorigin = 1而另一条socialorigin = 0,然后使用垂直线1中的红点和垂直线2中的红点连接一条线,依此类推其他颜色。这适用于横轴(ISCED 1,ISCED 2等)中的所有类别。如果仍然不清楚,我会尝试显示一个模仿我想要的图像。

希望这会让事情更清楚。

1 个答案:

答案 0 :(得分:1)

编辑:我想是这样的? 这需要一点点黑客工作,因为我们正在用一条线加入躲闪点。首先让我们构建基础图:

p <- ggplot(workdataset, aes(x = Level, y = Prob, group = socialorigin, colour = dadedu)) + 
         geom_point(aes(shape = dadedu), position = position_dodge(width = 0.50))

现在我们要使用ggplot_build来获取数据:

newdat <- ggplot_build(p)$data[[1]]

newdat现在是我们情节的x和y,组和颜色。我们需要得到一个新的var来分组 - 形状,颜色和x的组合(这里由于闪避而呈圆形):

newdat$group2 <- paste0(newdat$shape, newdat$colour, round(newdat$xmin))

然后将其添加到情节中:

p + geom_line(data = newdat,aes(x,y, group = group2), colour = newdat$colour)

以前的答案如下:

我认为您需要为socialorigindadedu的组合创建一个新变量:

workdataset$comb <- paste0(workdataset$dadedu, workdataset$socialorigin)

然后我们可以使用它来对行进行分组,并使用socialorigin来制作点形状:

library(ggplot2)
ggplot(workdataset, aes(x = Level, y = Prob, colour = dadedu)) +
    geom_point(aes(shape = factor(socialorigin)), size = 3) +
    geom_line(aes(group = comb))

这给出了这个:

enter image description here