如何对同一列分组的N0与N1的yield数据做回归拟合绘图?
解决方案
你的代码无法运行主要有两个原因:一是aes()括号未闭合,二是在ggplot的aes中直接使用subset()会破坏数据上下文映射逻辑。以下是无需转置原数据集的简洁可行方案:
方案一:构造临时小数据框(推荐)
直接提取两个分组的yield值生成临时数据,完全不改动原dataA结构,适配你30多列的实际数据场景:
# 加载ggplot2 library(ggplot2) ggplot(data = data.frame( N0_yield = dataA$yield[dataA$nitrogen == "N0"], N1_yield = dataA$yield[dataA$nitrogen == "N1"] ), aes(x = N0_yield, y = N1_yield)) + geom_point(alpha = 0.5, size = 4) + stat_smooth(method = 'lm', linetype = 1, se = FALSE, formula = y ~ x, linewidth = 0.5, color = "dark red")
方案二:利用原数据的索引匹配
如果不想额外构造数据框,也可以直接在aes中用索引提取对应值(注意两个分组的样本数必须一致,你的数据满足这个条件):
ggplot() + geom_point(aes( x = dataA$yield[dataA$nitrogen == "N0"], y = dataA$yield[dataA$nitrogen == "N1"] ), alpha = 0.5, size = 4) + stat_smooth(aes( x = dataA$yield[dataA$nitrogen == "N0"], y = dataA$yield[dataA$nitrogen == "N1"] ), method = 'lm', linetype = 1, se = FALSE, formula = y ~ x, linewidth = 0.5, color = "dark red")
说明
- 两种方案都不需要转置你30多列的原数据集,仅针对
nitrogen分组提取所需的yield值。 - 方案一更符合
ggplot的使用规范,代码可读性更强,优先推荐。
内容的提问来源于stack exchange,提问作者J.K Kim
相关产品推荐
相关产品推荐

