在ggplot中通过斜率聚集多条线

时间:2017-05-15 20:04:55

标签: r ggplot2

在我的数据集中,AP是名称,D是时间,V是值。我想为每个名字绘制一段时间值的线图。

   AP   D  V
1 329   0 27
2 329  16 26
3 329  42 30
4 329  72 30
5 329 106 32
6 329 135 27
7 425   0 28
8 425  30 35

enter image description here

这很容易,如下所示: 我的问题是: 有可能我可以做多项式拟合/线性回归并根据SLOPE对这些行进行分组吗?

THX

1 个答案:

答案 0 :(得分:1)

有两种方法,第一种是在OLS回归的背景下使用斜率的定义,即see formula at wikipedia。在这里,我使用dplyr进行转换,但您也可以在基数R中执行此操作。

data_frame(x = rep(1:10, 10), 
           y = rnorm(100) - 0.5*x, 
           grp = rep(letters[1:10], each = 10)) %>% 
  group_by(grp) %>% 
  mutate(slope = sum((y - mean(y))*(x - mean(x)))/sum((x - mean(x))^2)) %>% 
  ggplot(aes(x, y)) + 
  geom_path(aes(group = grp, colour = slope))

第二种方式是使用broom以更灵活的方式进行。这是一个例子:

df <- data_frame(x = rep(1:10, 10), 
           y = rnorm(100) - 0.5*x, 
           grp = rep(letters[1:10], each = 10))

df.fit <- df %>% group_by(grp) %>% 
  do(tidy(lm(y~x, data = .))) %>%   # or other model
  filter(term == "x")
    # modify this line to select the correct term of your chosen model


full_join(df, df.fit) %>% 
  ggplot(aes(x, y)) + 
  geom_path(aes(group = grp, colour = estimate))

enter image description here