如何在 ggplot2 geom_point 中分隔车道组?

How to separate groups of lanes in ggplot2 geom_point?

我正在绘制结构如下的 data.frame 中的数据:

    A       B       C       D
    29.8    8.7     0.1     Type_1

前三列是浮点数,最后一列是字符串。第 4 列中有 13 个可能的字符串,对于这些字符串中的每一个,都会通过 geom_point() 在图中生成一行。前三列中的浮点值用于填充 "points" 的行(此处无关紧要)。基本上,每一行包含数千个点,这些点根据它们在 A、B 和 C 中的值散布。

这是它的样子(没有轴标签,因为它是未发布的东西):

现在的问题是:我想通过以特定方式增加行之间的宽度来根据不同的标准对行进行分组,也就是说,不是通过增加行之间的宽度通常 但特别是我想要的地方。如何操作?

一个假想的例子:type_1和type_2属于一起,必须一起观察,而type_3必须分开,以免混淆。

底线:是否有一种快速简便的方法来指定行组之间的宽度

以下是我剧情代码的相关部分:

P1 <- ggplot(...) + 
geom_point(position = position_jitter(w = 0.15, h = 0), alpha=0.3, size=0.5) +
scale_x_discrete() +
scale_y_continuous(limits=c(0,100), breaks=seq(0,100,10)) + 
scale_color_gradient2(breaks=seq(0,100,20), 
                      limits=c(0,100), 
                      low="green3",
                      high="darkorchid4",
                      midpoint=50,
                      name="") +
coord_flip()

我认为解决问题的最简单方法是在数据框中创建一个包含 "grouping" 因子的列 "E"。由于您没有提供可重用数据,我相信 Dplyr 是创建此附加列的最佳解决方案,但我无法提供一大块代码。输出应该是这样的:

 A       B       C       D       E
29.8    8.7     0.1     Type_1  group_1
29.6    8.2     0.7     Type_2  group_1
...

那么你就可以按以下方式使用facet_wrap(~E, ncol=1):

P1 <- ggplot(...) + 
geom_point(position = position_jitter(w = 0.15, h = 0), alpha=0.3, size=0.5) +
scale_x_discrete() +
scale_y_continuous(limits=c(0,100), breaks=seq(0,100,10)) + 
scale_color_gradient2(breaks=seq(0,100,20), 
                  limits=c(0,100), 
                  low="green3",
                  high="darkorchid4",
                  midpoint=50,
                  name="") +
coord_flip()+
facet_wrap(~E, ncol=1)