在 R 中使用 facet_grid 在每个面板上绘制多个 ablines

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

我有一个 2x2 网格图,每个面板有两个模型的数据。我需要为每个面板中的每个模型设置单独的回归线。我可以用 facet_grid 做这个吗?除了回归线,我什么都有:

df <- data.frame(year=factor(c(2000,2001,2002,2000,2001,2002,2000,2001,2002,2000,2001,2002,
                        2000,2001,2002,2000,2001,2002,2000,2001,2002,2000,2001,2002)),
                 crop=c("Maize","Maize","Maize","Maize","Maize","Maize",
                        "Soybean","Soybean","Soybean","Soybean","Soybean","Soybean",
                        "Maize","Maize","Maize","Maize","Maize","Maize",
                        "Soybean","Soybean","Soybean","Soybean","Soybean","Soybean"),
                 treatment_code=c("T1","T1","T1","T2","T2","T2",
                                  "T1","T1","T1","T2","T2","T2",
                                  "T1","T1","T1","T2","T2","T2",
                                  "T1","T1","T1","T2","T2","T2"),
                 value=c(9,10,8.5,11,12,7.8,
                         4,7,7.5,3,3,5,
                         12,11,9,13,9,10,
                         5,3,6,4,5,4),
                 model=c("A","A","A","A","A","A","A","A","A","A","A","A",
                         "B","B","B","B","B","B","B","B","B","B","B","B"))

gY_calib <- df %>%
  ggplot(aes(x=year, y=value, color=model, show.legend=TRUE)) +
  geom_point(show.legend=TRUE) +
  xlab("Year") +
  ylab(expression('Grain Yield (Mg ha ' ^-1*')')) +
  ylim(0,13) +
  facet_grid(crop~treatment_code) 

gY_calib

r linear-regression facet-grid
1个回答
1
投票

你的

year
是因素。如果您将其设为数字,它将起作用。您可以使用以下代码

df <- data.frame(year=c(2000,2001,2002,2000,2001,2002,2000,2001,2002,2000,2001,2002,
                               2000,2001,2002,2000,2001,2002,2000,2001,2002,2000,2001,2002),
                 crop=c("Maize","Maize","Maize","Maize","Maize","Maize",
                        "Soybean","Soybean","Soybean","Soybean","Soybean","Soybean",
                        "Maize","Maize","Maize","Maize","Maize","Maize",
                        "Soybean","Soybean","Soybean","Soybean","Soybean","Soybean"),
                 treatment_code=c("T1","T1","T1","T2","T2","T2",
                                  "T1","T1","T1","T2","T2","T2",
                                  "T1","T1","T1","T2","T2","T2",
                                  "T1","T1","T1","T2","T2","T2"),
                 value=c(9,10,8.5,11,12,7.8,
                         4,7,7.5,3,3,5,
                         12,11,9,13,9,10,
                         5,3,6,4,5,4),
                 model=c("A","A","A","A","A","A","A","A","A","A","A","A",
                         "B","B","B","B","B","B","B","B","B","B","B","B"))

ggplot(df, aes(x=year, y=value)) +
  geom_point(stat='identity', position='identity', aes(color=model)) +
  xlab("Year") +
  ylab(expression('Grain Yield (Mg ha ' ^-1*')')) +
  ylim(0,13) + 
  geom_smooth(method='lm', formula= y~x, aes(colour = model)) +
  facet_grid(crop~treatment_code) +
  scale_x_continuous(labels = scales::label_number(accuracy = 1), n.breaks = 3)

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