R:如何相对于 x 轴传播(抖动)点?
R: How to spread (jitter) points with respect to the x axis?
我在 R 中有以下代码片段:
dat <- data.frame(cond = factor(rep("A",10)),
rating = c(1,2,3,4,6,6,7,8,9,10))
ggplot(dat, aes(x=cond, y=rating)) +
geom_boxplot() +
guides(fill=FALSE) +
geom_point(aes(y=3)) +
geom_point(aes(y=3)) +
geom_point(aes(y=5))
这个特定的代码片段生成一个箱线图,其中一个点超过另一个点(在上述情况下,一个点 3 超过另一个点 3)。
如何移动点 3,使其在 y 轴上保持在同一位置,但在 x 轴上稍微向左或向右移动?
这可以通过使用position_jitter
函数来实现:
geom_point(aes(y=3), position = position_jitter(w = 0.1, h = 0))
更新:
要仅绘制提供的三个点,您可以构建一个新数据集并绘制:
points_dat <- data.frame(cond = factor(rep("A", 3)), rating = c(3, 3, 5))
ggplot(dat, aes(x=cond, y=rating)) +
geom_boxplot() +
guides(fill=FALSE) +
geom_point(aes(x=cond, y=rating), data = points_dat, position = position_jitter(w = 0.05, h = 0))
ggplot2
现在包括 position_dodge()
。根据帮助的描述:“Dodging 在调整水平位置时保留 geom 的垂直位置。”
因此你可以将它用作 geom_point(position = position_dodge(0.5))
或者,如果你想躲避由线连接的点并且需要躲避在两个 geom 之间是相同的,你可以使用类似的东西:
dat <- data.frame(cond = rep(c("A", "B"), each=10), x=rep(1:10, 2), y=rnorm(20))
dodge <- position_dodge(.3) # how much jitter on the x-axis?
ggplot(dat, aes(x, y, group=cond, color=cond)) +
geom_line(position = dodge) +
geom_point(position = dodge)
ggplot2
现在有一个名为 geom_jitter
的单独 geom
,因此您不需要 position = dodge
或 position = position_dodge())
参数。这里适用于 OP 的示例:
dat <- data.frame(cond = factor(rep("A",10)),
rating = c(1,2,3,4,6,6,7,8,9,10))
ggplot(dat, aes(x=cond, y=rating)) +
geom_boxplot() +
guides(fill=FALSE) +
geom_jitter(aes(y=c(3, 3, 5)))
我在 R 中有以下代码片段:
dat <- data.frame(cond = factor(rep("A",10)),
rating = c(1,2,3,4,6,6,7,8,9,10))
ggplot(dat, aes(x=cond, y=rating)) +
geom_boxplot() +
guides(fill=FALSE) +
geom_point(aes(y=3)) +
geom_point(aes(y=3)) +
geom_point(aes(y=5))
这个特定的代码片段生成一个箱线图,其中一个点超过另一个点(在上述情况下,一个点 3 超过另一个点 3)。
如何移动点 3,使其在 y 轴上保持在同一位置,但在 x 轴上稍微向左或向右移动?
这可以通过使用position_jitter
函数来实现:
geom_point(aes(y=3), position = position_jitter(w = 0.1, h = 0))
更新: 要仅绘制提供的三个点,您可以构建一个新数据集并绘制:
points_dat <- data.frame(cond = factor(rep("A", 3)), rating = c(3, 3, 5))
ggplot(dat, aes(x=cond, y=rating)) +
geom_boxplot() +
guides(fill=FALSE) +
geom_point(aes(x=cond, y=rating), data = points_dat, position = position_jitter(w = 0.05, h = 0))
ggplot2
现在包括 position_dodge()
。根据帮助的描述:“Dodging 在调整水平位置时保留 geom 的垂直位置。”
因此你可以将它用作 geom_point(position = position_dodge(0.5))
或者,如果你想躲避由线连接的点并且需要躲避在两个 geom 之间是相同的,你可以使用类似的东西:
dat <- data.frame(cond = rep(c("A", "B"), each=10), x=rep(1:10, 2), y=rnorm(20))
dodge <- position_dodge(.3) # how much jitter on the x-axis?
ggplot(dat, aes(x, y, group=cond, color=cond)) +
geom_line(position = dodge) +
geom_point(position = dodge)
ggplot2
现在有一个名为 geom_jitter
的单独 geom
,因此您不需要 position = dodge
或 position = position_dodge())
参数。这里适用于 OP 的示例:
dat <- data.frame(cond = factor(rep("A",10)),
rating = c(1,2,3,4,6,6,7,8,9,10))
ggplot(dat, aes(x=cond, y=rating)) +
geom_boxplot() +
guides(fill=FALSE) +
geom_jitter(aes(y=c(3, 3, 5)))