当数据如下所示
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)
但它不起作用。
你能告诉我怎么做吗?
总是非常感谢!
我们可以使用子集将向量传递给 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)