r - 将 geom_point 和 geom_line 与 position_jitterdodge 结合用于两个分组因子

标签 r plot ggplot2

我已经根据这里的几篇文章尝试了一些建议,并阅读了 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))

enter image description here

关于r - 将 geom_point 和 geom_line 与 position_jitterdodge 结合用于两个分组因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020435/

相关文章:

R ggplot 条形图;基于两个单独的变量填充

r - 根据逻辑向量选择 data.table 中的列

r - 制作一个填充向量的循环语句?

matplotlib - 在循环中使用 savefig() 时出现 IOError "Too many open files"

image - 绘制相位和幅度图像傅里叶

r - 在逻辑回归后使用 +1sd/-1sd 在 ggplot 中绘制交互图

r - Ggplot2 不同的 alpha 行为

r - 将数据帧两两(或按名称)绑定(bind)在列表中 - R

R 如何将 MultiLineString GeoJson 文件转换为具有长列和纬度列的数据框?

python - 将 matplotlib 3D 图形的框架更改为 x、y 和 z 箭头