使用facet()在散点图中绘制多条回归线,并将斜率系数添加到每条线

时间:2019-04-03 21:14:23

标签: r ggplot2 linear-regression scatter-plot facet-grid

我想在散点图中绘制每个城市的回归线。

数据框如下:

     df
            City      str    testscr
19     Los Angeles 22.70402  619.80
31       San Diego 20.60697  624.55
33     Los Angeles 21.53581  625.30
35  San Bernardino 21.19407  626.10
36     Los Angeles 21.86535  626.80
45       Riverside 19.26697  628.75
46     Los Angeles 23.30189  629.80
63          Orange 21.94756  633.15
67     Los Angeles 20.68242  634.05
69       San Diego 21.78650  634.10
72     Los Angeles 21.15289  634.40
76  San Bernardino 18.98373  634.95
86  San Bernardino 19.30676  636.60
87       Riverside 20.89231  636.70
105 San Bernardino 19.75422  639.35
114         Orange 19.62662  640.75
118      San Diego 20.08452  641.45
126      Riverside 22.81818  643.20
128    Los Angeles 21.37363  643.40
146      San Diego 19.79654  645.55
156         Orange 21.04869  646.70
157         Orange 20.17544  646.90
160      San Diego 20.29137  647.25
168      San Diego 17.15328  648.70
169 San Bernardino 22.34977  648.95
170         Orange 22.17007  649.15
191         Orange 23.01438  652.10
200      Riverside 21.03721  653.40

我的方法是:

ggplot(data=df,aes(x=str,y=testscr))+
  geom_point()+
  geom_smooth(method="lm",se=FALSE)+
  facet_grid(. ~City)

有没有更好或更聪明的方法?以及如何向每条回归线添加斜率系数?

1 个答案:

答案 0 :(得分:2)

让我们首先处理组,然后回答有关添加标签的第二部分。

如果要按组绘制,则基本上有两个选择。首先,如您所愿,刻面。第二个方法是使用aes(group = City)或通过另一种美学方法,例如aes(color = City)对点进行分组。

如果第二种方法生成了一个混乱的图,例如有很多重叠的线,那么最好使用刻面。

使用iris数据集的几个示例。

首先,按颜色分组:

library(ggplot2)
iris %>% 
  ggplot(aes(Petal.Length, Sepal.Length)) + 
  geom_point(aes(color = Species)) + 
  geom_smooth(method = "lm", 
              aes(color = Species), 
              se = FALSE)

enter image description here

按组分组:

iris %>% 
  ggplot(aes(Petal.Length, Sepal.Length)) + 
  geom_point(aes(group = Species)) + 
  geom_smooth(method = "lm", 
              aes(color = Species), 
              se = FALSE)

enter image description here

使用构面:

iris %>% 
  ggplot(aes(Petal.Length, Sepal.Length)) + 
  geom_point() + 
  geom_smooth(method = "lm", 
              se = FALSE) +
  facet_wrap(~Species)

enter image description here

要添加诸如系数之类的标签,请查看ggpmisc包。这是使用stat_fit_tb添加系数的一种方法:

iris %>% 
  ggplot(aes(Petal.Length, Sepal.Length)) + 
  geom_point() + 
  geom_smooth(method = "lm", 
              se = FALSE) + 
  facet_wrap(~Species) + 
  stat_fit_tb(method = "lm", 
              tb.type = "fit.coefs")

enter image description here