首页 > 解决方案 > 如何在ggplot2中按顺序组织散点?

问题描述

这是我正在使用的数据的简化示例:

x <- c("before", "before", "before", "before", "after","after","after","after")
y <- c(22, 25, 26, 27, 45, 67, 89, 74)
z <- c("A", "A", "A", "B", "B", "B", "C", "C")
data <- data.frame(x,y,z)

这是我的ggplot2代码:

ggplot(data, aes(x=x, y=y, color=z, shape=z)) + geom_jitter()

该图最终看起来像这样:

图表最终看起来像这样

如何获得沿 x 轴顺序绘制的个人 A、B、C(变量 Z)的点?例如,在分类变量“after”上方,我想查看单个 B 抖动的所有点,然后查看单个 C 抖动旁边的所有点,而不是两者混合在一起的点?我无法在网上找到任何有关如何执行此类操作的示例。

为了进一步澄清,这是我希望我的图表最终看起来像的示例

这是我希望我的图表最终看起来像的示例

标签: rggplot2

解决方案


按类别抵消

要获得顺序排序,请按z变量分组。这将为x类别提供一个子类别z

ggplot2::ggplot(data, aes(x=x, y=y, group=z, color=z, shape=z)) + geom_jitter()

在此处输入图像描述

排序beforeafter不同的顺序:

您的x变量是一个分类变量,ggplot 会自动按字母顺序排序。要覆盖此字母排序,您必须将变量定义为factor

x <- c("before", "before", "before", "before", "after","after","after","after")
x <- factor(x, levels = c("before", "after"))
y <- c(22, 25, 26, 27, 45, 67, 89, 74)
z <- c("A", "A", "A", "B", "B", "B", "C", "C")
data <- data.frame(x,y,z)

这有效地给出before了 value1aftervalue 2,以便排序行为在 x 轴上产生正确的顺序。


推荐阅读