我已经根据这里的几篇文章尝试了一些建议,并阅读了 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)
我想要的是创建一个点图,x 轴为 b,y 轴为 c,x 轴上的点由 d 分组,它们之间的线由 a 分组。如果我们开始像这样将点放在图上,结果很好:
ggplot(temp, aes(x=b, y=c, fill=d, colour=d))+
geom_point(position=position_jitterdodge())
This is the dot plot I get, which is how I want it to look.这些点根据因子 d 进行颜色编码,而且它们向一侧抖动,因此 x 在左侧,y 在右侧。
现在,我想要的只是根据因子 a 将点与线连接起来。 This is a mocked-up version I made in 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 等的大多数组合,但到目前为止还没有运气。
任何帮助将不胜感激。
最佳答案
您可以使用d
之间的交互和 b
:
p <- ggplot(temp, aes(x=interaction(d, b), y=c, fill=d, colour=d))+ theme_classic()+
geom_point()
p + geom_line(aes(group=a),colour=1)
具有正确的 x 轴。将 x 转换为数字并设置新标签
p <- ggplot(temp, aes(x=as.numeric(interaction(d,b)), y=c, fill=d, colour=d))+ theme_classic()+
geom_point()
p <- p + geom_line(aes(group=a),colour=1)
p + scale_x_continuous(breaks = c(1.5,3.5,5.5), labels = levels(temp$b))
关于r - 将 geom_point 和 geom_line 与 position_jitterdodge 结合用于两个分组因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020435/