【问题标题】:Scatterplot with single regression line despite two groups using ggplot2尽管有两组使用 ggplot2,但散点图具有单条回归线
【发布时间】:2012-12-28 09:15:16
【问题描述】:

我想用 ggplot2 生成一个散点图,它包含一条通过所有数据点的回归线(无论它们来自哪个组),但同时通过分组变量改变标记的形状。下面的代码生成了组标记,但提供了两条回归线,每组一条。

#model=lm(df, ParamY~ParamX)
p1<-ggplot(df,aes(x=ParamX,y=ParamY,shape=group)) + geom_point() + stat_smooth(method=lm)

我该如何编程?

【问题讨论】:

    标签: r ggplot2 regression scatter-plot


    【解决方案1】:

    您不必在geom_point 中重做完整的aes 并添加另一层,只需将形状aes 移动到geom_point 调用:

    df <- data.frame(x=1:10,y=1:100+5,grouping = c(rep("a",10),rep("b",10)))
    ggplot(df,aes(x=x,y=y)) + 
    geom_point(aes(shape=grouping)) + 
    stat_smooth(method=lm)
    

    编辑:

    为了帮助您发表评论:

    因为无论如何,annotate 可能最终会在每个方面使用相同的标签。我喜欢制作一个迷你data.frame,它有我的分面变量和分面级别,另一列代表我要使用的标签。在这种情况下,标签数据框称为dfalbs

    然后使用它来标记数据框以单独标记方面,例如

    df <- data.frame(x=1:10,y=1:10,grouping =   
                      c(rep("a",5),rep("b",5)),faceting=c(rep(c("oneR2","twoR2"),5)))
    
    
    dflabs <- data.frame(faceting=c("oneR2","twoR2"),posx=c(7.5,7.5),posy=c(2.5,2.5))
    
    ggplot(df,aes(x=x,y=y,group=faceting)) + 
           geom_point(aes(shape=grouping),size=5) + 
           stat_smooth(method=lm) +
           facet_wrap( ~ faceting) +
           geom_text(data=dflabs,aes(x=posx,y=posy,label=faceting))
    

    【讨论】:

    • 我同意,这绝对是一些优雅的代码。当我求助于构面时,我可以单独注释行(针对每个组/构面)吗?
    • 注解是指文字还是画线?
    • 我的意思是+ annotate("text", label=)。如果我在方面有两条回归线,我想在图中写出不同的 R2 和 p 值。
    • 根据我的经验,annotate 最终会在每个方面放置相同的标签。我喜欢用标签和刻面制作一个小的data.frame,然后使用geom_text 和新的小data.frame
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2021-01-28
    • 2023-03-29
    • 2021-01-02
    相关资源
    最近更新 更多