9.4 散点图

9.4.1 问题

你想要绘制一幅散点图。

9.4.2 方案

假设这是你的数据:

  1. set.seed(955)
  2. # 创建一些噪声数据
  3. dat <- data.frame(cond = rep(c("A", "B"), each = 10), xvar = 1:20 +
  4. rnorm(20, sd = 3), yvar = 1:20 + rnorm(20, sd = 3))
  5. head(dat)
  6. #> cond xvar yvar
  7. #> 1 A -4.252 3.47316
  8. #> 2 A 1.702 0.00594
  9. #> 3 A 4.323 -0.09425
  10. #> 4 A 1.781 2.07281
  11. #> 5 A 11.537 1.21544
  12. #> 6 A 6.672 3.60811
  13. library(ggplot2)

9.4.2.1 带回归线的基本散点图

  1. ggplot(dat, aes(x=xvar, y=yvar)) +
  2. geom_point(shape=1) # 使用空心圆

9.4 散点图 - 图1

  1. ggplot(dat, aes(x=xvar, y=yvar)) +
  2. geom_point(shape=1) + # 使用空心圆
  3. geom_smooth(method=lm) # 添加回归线

9.4 散点图 - 图2

  1. # (默认包含 95% 置信区间)
  2. ggplot(dat, aes(x=xvar, y=yvar)) +
  3. geom_point(shape=1) + # 使用空心圆
  4. geom_smooth(method=lm, # 添加回归线
  5. se=FALSE) # 不加置信区域

9.4 散点图 - 图3

  1. ggplot(dat, aes(x=xvar, y=yvar)) +
  2. geom_point(shape=1) + # 使用空心圆
  3. geom_smooth() # 添加带置信区间的平滑拟合曲线
  4. #> `geom_smooth()` using method = 'loess' and formula 'y ~ x'

9.4 散点图 - 图4

9.4.2.2 通过其他变量设置颜色和形状

  1. # 根据 cond 设置颜色
  2. ggplot(dat, aes(x=xvar, y=yvar, color=cond)) + geom_point(shape=1)

9.4 散点图 - 图5

  1. # 同上,但这里带了回归线
  2. ggplot(dat, aes(x=xvar, y=yvar, color=cond)) +
  3. geom_point(shape=1) +
  4. scale_colour_hue(l=50) + # 使用稍暗的调色板
  5. geom_smooth(method=lm,
  6. se=FALSE)

9.4 散点图 - 图6

  1. # 拓展回归线到数据区域之外(带预测效果)
  2. ggplot(dat, aes(x=xvar, y=yvar, color=cond)) + geom_point(shape=1) +
  3. scale_colour_hue(l=50) +
  4. geom_smooth(method=lm,
  5. se=FALSE,
  6. fullrange=TRUE)

9.4 散点图 - 图7

  1. # 根据 cond 设置形状
  2. ggplot(dat, aes(x=xvar, y=yvar, shape=cond)) + geom_point()

9.4 散点图 - 图8

  1. # 同上,但形状不同
  2. ggplot(dat, aes(x=xvar, y=yvar, shape=cond)) + geom_point() +
  3. scale_shape_manual(values=c(1,2)) # 使用圆和三角形

9.4 散点图 - 图9

查看颜色获取更多关于颜色的信息。查看形状与线形获取更多相关内容。

9.4.2.3 处理图像元素叠加

如果你有很多数据点,或者你的数据是离散的,那么数据可能会覆盖到一起,这样就看不清楚同一个位置有多少数据了。

  1. # 取近似值
  2. dat$xrnd <- round(dat$xvar/5) * 5
  3. dat$yrnd <- round(dat$yvar/5) * 5
  4. # 让每个点都部分透明 如果情况严重,可以使用更小的值
  5. ggplot(dat, aes(x = xrnd, y = yrnd)) + geom_point(shape = 19,
  6. alpha = 1/4)

9.4 散点图 - 图10

  1. # 抖动点 抖动范围在 x 轴上是 1,y 轴上是 0.5
  2. ggplot(dat, aes(x = xrnd, y = yrnd)) + geom_point(shape = 1,
  3. position = position_jitter(width = 1, height = 0.5))

9.4 散点图 - 图11