我有这个数据集:
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等)中的所有类别。如果仍然不清楚,我会尝试显示一个模仿我想要的图像。
希望这会让事情更清楚。
答案 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)
以前的答案如下:
我认为您需要为socialorigin
和dadedu
的组合创建一个新变量:
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))
这给出了这个: