当两个变量在同一列时制作回归图

问题描述 投票:0回答:1

当数据如下所示

    nitrogen=rep(c("N0","N1"), each=5)
    yield=c(10,12,15,16,18,22,20,18,19,22)
    dataA=data.frame(nitrogen,yield)
        
     nitrogen yield
       N0    10
       N0    12
       N0    15
       N0    16
       N0    18
       N1    22
       N1    20
       N1    18
       N1    19
       N1    22

如果我想拟合 No 和 N1 的 yield,我该怎么做?当然,我可以列转行,但是我的真实数据有30多列,所以如果我转列转行,数据中的列会很多。所以我想要一个简单的代码来适应 N0 和 N1 的产量。

我只是像下面这样想

ggplot(data=dataA, aes(x=subset(dataA,nitrogen=="N0")$yield, y=subset(dataA,nitrogen=="N1")$yield)+
  stat_smooth(method='lm', linetype=1, se=FALSE, formula=y~x, 
              linewidth=0.5, color="dark red") +
  geom_point(alpha=0.5, size=4)

但它不起作用。

你能告诉我怎么做吗?

总是非常感谢!

r ggplot2 regression subset data-fitting
1个回答
1
投票

我们可以使用子集将向量传递给 x 和 y:

ggplot() +
  stat_smooth(aes(x = dataA[ dataA$nitrogen == "N0", "yield" ],
                  y = dataA[ dataA$nitrogen == "N1", "yield" ]),
              method = "lm", linetype = 1, se = FALSE, 
              formula = y ~ x, 
              linewidth = 0.5, color = "dark red") +
  geom_point(aes(x = dataA[ dataA$nitrogen == "N0", "yield" ],
                 y = dataA[ dataA$nitrogen == "N1", "yield" ]),
             alpha = 0.5, size = 4)

但我更愿意在绘图之前转置数据:

d <- data.frame(split(dataA$yield, dataA$nitrogen))

ggplot(d, aes(x = N0, y = N1)) +
  stat_smooth(method = "lm", linetype = 1, se = FALSE, formula = y ~ x, 
              linewidth = 0.5, color = "dark red") +
  geom_point(alpha = 0.5, size = 4)

© www.soinside.com 2019 - 2024. All rights reserved.