2017-06-14 61 views
3

我构建了一个简单的线性回归模型,并使用该模型生成了一些预测值。但是,我更感兴趣的是在图表上将其可视化,但我不知道如何添加图例以将原始值mpg值更改为“黑色”,并将新值预测为值为“红色”。如何使用ggplot2将新图例添加到复杂散点图

在本实施例中使用的数据是从数据集mtcars数据集

library(ggplot2) 

    library(datasets) 
    library(broom) 

    # Build a simple linear model between hp and mpg 

    m1<-lm(hp~mpg,data=mtcars) 

    # Predict new `mpg` given values below 

    new_mpg = data.frame(mpg=c(23,21,30,28)) 

    new_hp<- augment(m1,newdata=new_mpg) 

    # plot new predicted values in the graph along with original mpg values 

    ggplot(data=mtcars,aes(x=mpg,y=hp)) + geom_point(color="black") + geom_smooth(method="lm",col=4,se=F) + 
     geom_point(data=new_hp,aes(y=.fitted),color="red") 

enter image description here

散点图

回答

3

这里是一个想法。您可以将预测数据和观测数据组合在同一数据框中,然后创建散点图以生成图例。以下代码是现有代码的扩展。

# Prepare the dataset 
library(dplyr) 

new_hp2 <- new_hp %>% 
    select(mpg, hp = .fitted) %>% 
    # Add a label to show it is predicted data 
    mutate(Type = "Predicted") 

dt <- mtcars %>% 
    select(mpg, hp) %>% 
    # Add a label to show it is observed data 
    mutate(Type = "Observed") %>% 
    # Combine predicted data and observed data 
    bind_rows(new_hp2) 

# plot the data 
ggplot(data = dt, aes(x = mpg, y = hp, color = factor(Type))) + 
    geom_smooth(method="lm", col = 4, se = F) + 
    geom_point() + 
    scale_color_manual(name = "Type", values = c("Black", "Red")) 
+2

几乎相同的 “一个班轮” 我正要张贴:)'mtcars%>%选择(MPG,.fitted = hp)%> mutate(预测= 0)%>%bind_rows(mutate(new_hp,predicted = 1))%>%ggplot(aes(mpg,.fitted))+ geom_point(aes(color = as.factor预测)))+ geom_smooth(method =“lm”,se = FALSE)+ scale_color_manual(values = c(“black”,“red”),name =“predicted”)+ labs(y =“hp”)' – neilfws

+0

@neilfws我喜欢你的“单行”。感谢分享。 – www

+0

感谢您分享您的代码。我非常感谢你的帮助 – Tuyen

2

这里是做不dplyr的另一种方式:

ggplot() + 
    geom_point(data = mtcars, aes(x = mpg, y = hp, colour = "Obs")) + 
    geom_point(data = new_hp, aes(x = mpg, y = .fitted, colour = "Pred")) + 
    scale_colour_manual(name="Type", 
         values = c("black", "red")) + 
    geom_smooth(data = mtcars, aes(x = mpg, y = hp), 
       method = "lm", col = 4, se = F) 
+0

非常感谢@ AK88。它真的帮助我扩大我的R技能 – Tuyen