ggplot中所有数据点之间的平滑线

时间:2019-02-05 02:04:36

标签: r ggplot2

我有一个与此示例类似的data.frame

ts

我想显示SqMt <- "Sex Sq..Meters PDXTotalFreqStpy 1 M 129 22 2 M 129 0 3 M 129 1 4 F 129 35 5 F 129 42 6 F 129 5 7 M 557 20 8 M 557 0 9 M 557 15 10 F 557 39 11 F 557 0 12 F 557 0 13 M 1208 33 14 M 1208 26 15 M 1208 3 16 F 1208 7 17 F 1208 0 18 F 1208 8 19 M 604 68 20 M 604 0 21 M 604 0 22 F 604 0 23 F 604 0 24 F 604 0" Data <- read.table(text=SqMt, header = TRUE) 组织的每个PDXTotalFreqStpy的平均Sq..Meters。这就是我用的:

Sex

如何使这些线条平滑,以使它们不锯齿,而是优美而弯曲,并遍历所有数据点?我已经看到样条曲线上的东西,但是我还没有使它们起作用?

1 个答案:

答案 0 :(得分:2)

看看这是否对您有用:

library(dplyr)

# increase n if the result is not smooth enough
# (for this example, n = 50 looks sufficient to me)
n = 50

# manipulate data to calculate the mean for each sex at each x-value
# before passing the result to ggplot()
Data %>%
  group_by(Sex, x = Sq..Meters) %>%
  summarise(y = mean(PDXTotalFreqStpy)) %>%
  ungroup() %>%

  ggplot(aes(x, y, color = Sex)) +

  # optional: show point locations for reference
  geom_point() +

  # optional: show original lines for reference
  geom_line(linetype = "dashed", alpha = 0.5) +

  # further data manipulation to calculate values for smoothed spline
  geom_line(data = . %>%
              group_by(Sex) %>%
              summarise(x1 = list(spline(x, y, n)[["x"]]),
                        y1 = list(spline(x, y, n)[["y"]])) %>%
              tidyr::unnest(),
            aes(x = x1, y = y1))

plot