2015-10-15 111 views
0

我使用ggplot2在同一圖表中繪製了兩個具有相同獨立變量和不同自變量的迴歸模型。我想添加一個對應於每個不同因變量的圖例。其他職位建議使用melt()函數來做到這一點,但是,如何在保留模型輸出的同時做到這一點還不清楚。例如:在同一ggplot2上創建不同模型和數據集的圖例

require(ggplot2) 
set.seed(123) 
dat <- data.frame(x = rnorm(100), z = rnorm(100), y1 = rnorm(100), y2 = rnorm(100)) 
dat1 <- dat[,c(1,2,3)] 
dat2 <- dat[,c(1,2,4)] 

mod1 <- lm(y1 ~ x + z, data = dat1) 
mod2 <- lm(y2 ~ x + z, data = dat2) 


dat1$mod1 <- predict(mod1, newdata =dat1) 
err <- predict(mod1, newdata =dat1, se = TRUE) 
dat1$ucl <- err$fit + 1.96 * err$se.fit 
dat1$lcl <- err$fit - 1.96 * err$se.fit 


dat2$mod2 <- predict(mod2, newdata =dat2) 
err <- predict(mod2, newdata =dat2, se = TRUE) 
dat2$ucl <- err$fit + 1.96 * err$se.fit 
dat2$lcl <- err$fit - 1.96 * err$se.fit 


ggplot(dat1) + 
     geom_point(aes(x = x, y = mod1), size = .8, colour = "black") + 
     geom_smooth(data = dat1, aes(x= x, y = mod1, ymin = lcl, ymax = ucl), 
        size = 1, colour = "darkblue", se = TRUE, stat = "smooth", 
        method = "lm") + 

     geom_point(data = dat2, aes(x = x, y = mod2), size = .8, colour = "black") + 
     geom_smooth(data = dat2, aes(x= x, y = mod2, ymin = lcl, ymax = ucl), 
        size = 1, colour = "darkred", se = TRUE, stat = "smooth", 
        method = "lm") + 
     scale_colour_manual(values = c("y1" = "darkred", "y2" = "red")) 

有關如何做到這一點的任何想法?謝謝。

+0

您對'ggplot'呼叫使用3個數據幀(DAT,DAT1,DAT2),但你的代碼僅創建'dat'。正如你所指出的,答案可能涉及到'melt()',但是一旦你修復了數據創建代碼以對應於'ggplot'引用的數據幀,它就會更容易幫助你。致歉; – eipi10

+0

道歉;適當編輯。 –

回答

4

下面是我該怎麼做。首先我們gather一切(這是tidyr融化),然後繪製出來。這裏的關鍵是使用group = model來分離數據。 提供的數據進行了編輯,我們首先需要重組它喜歡它是:

dat <- dat1 
dat$mod2 <- dat2$mod2 

然後我們使用tidyr把它變成長期的數據:

library(tidyr) 
dat1 <- dat %>% gather(model, val, mod1, mod2) 

然後我們就可以繪製(請注意AES的清理,你可以調用它一次,然後繼承):

library(ggplot2) 
ggplot(dat1, aes(x = x, y = val, group = model)) + 
    geom_point(size = .8, colour = "black") + 
    geom_smooth(aes(col=model), size = 1, se = TRUE, stat = "smooth", method = "lm") 

作爲一個方面說明,我不知道你在想什麼,你都在ymaxymin做方geom_smooth - 這裏沒有效果,錯誤計算方法爲geom_smooth。也許你想geom_ribbon使用你自己的錯誤?

enter image description here

+0

謝謝,這太好了。出於好奇,有沒有什麼辦法可以手動添加它,而不是先將所有模型融合在一起? –

+1

不[很容易](https://stackoverflow.com/questions/17148679/ggplot2-need-to-construct-a-manual-legend-for-complicated-plot) – jeremycg

相關問題