我尝试了几个建议,这些建议基于这里的几篇文章,以及阅读ggplot2文档,但是这个问题略有不同,我还没有找到解决方案。
以下是一个代码片段,用于创建类似于我正在处理的熔化数据框:
a <- c(1,2,3,4,5,6,1,2,3,4,5,6)
b <- c("loss", "draw", "win", "draw", "loss", "win", "loss", "draw", "win", "draw", "loss", "win")
c <- c(2,3,5,4,4,5,4,4,3,5,2,4)
d <- c(rep("x", 6), rep("y", 6))
temp <- data.frame(a,b,c,d)
我想创建一个点图,横轴为b,纵轴为c,横轴上的点按d分组,它们之间用a分组的线连接。如果我们只是将点放在图表上,它看起来很好:
ggplot(temp, aes(x=b, y=c, fill=d, colour=d))+
geom_point(position=position_jitterdodge())
这是我得到的点图,它看起来就是我想要的样子。 点根据因素d进行颜色编码,并且它们被抖动并排放置,以便x在左侧,y在右侧。
现在,我只想根据因素a用线连接这些点。 这是我在 MS Paint 中制作的模拟版本,它应该是这个样子。添加一个geom_line并将geom_line分组设置为a应该有效...
ggplot(temp, aes(x=b, y=c, fill=d, colour=d))+
geom_point(position=position_jitterdodge())+
geom_line(aes(group=a),position=position_jitterdodge())
我尝试连接正确的点,但是它并没有得到正确的结果。它创建的线条长度适合连接正确的点,但它们几乎没有接触到它们,看起来它们随机出现在图表上。我想添加另一个截屏,但我还没有权限。
此外,如果我将组美学更改为整体美学,就像这样:
ggplot(temp, aes(x=b, y=c, fill=d, colour=d, aes(group=a)))+
geom_point(position=position_jitterdodge())+
geom_line(position=position_jitterdodge())
然后点会被交换到错误的位置。而且无论如何,线条仍然无法完全连接到点上。
我还尝试在position_jitterdodge()部分中指定width和jitter.width值,但线条和点仍然无法正确连接。我也阅读了ggplot2文档、几个之前的stackoverflow问题,并尝试了大多数position_jitter、position_dodge、geom_jitter等组合,但目前还没有成功。
非常感谢任何帮助。
p + scale_x_continuous(breaks = c(1.5,3.5,5.5), labels = levels(temp$b))
- GFL