【问题标题】:ggplot2: Problem with x axis when adding regression line equation on each facetggplot2:在每个方面添加回归线方程时出现x轴问题
【发布时间】:2019-06-05 13:45:46
【问题描述】:

基于此处的示例 Adding Regression Line Equation and R2 on graph,我正在努力将我的模型的回归线方程包含在每个方面。但是,我不明白为什么要改变我的 x 轴的限制。

library(ggplot2)
library(reshape2)

df <- data.frame(year = seq(1979,2010), M02 = runif(32,-4,6), 
M06 = runif(32, -2.4, 5.1), M07 = runif(32, -2, 7.1))
df <- melt(df, id = c("year"))


ggplot(data = df, mapping = aes(x = year, y = value)) +
geom_point() +
scale_x_continuous() + 
stat_smooth_func(geom = 'text', method = 'lm', hjust = 0, parse = T) +
geom_smooth(method = 'lm', se = T) +
facet_wrap(~ variable) # as you can see, the scale_x_axis goes back to 1800

如果我在 x 上包含限制,

scale_x_continuous(limits = c(1979,2010)) 

它不再显示回归系数。我在这里做错了什么?

stat_smooth_func 可在此处获得: https://gist.github.com/kdauria/524eade46135f6348140

【问题讨论】:

    标签: r ggplot2 regression facet-wrap ggpmisc


    【解决方案1】:

    您可以使用ggpmisc 包中的stat_poly_eq 函数。

    library(reshape2)
    library(ggplot2)
    library(ggpmisc)
    #> For news about 'ggpmisc', please, see https://www.r4photobiology.info/
    #> For on-line documentation see https://docs.r4photobiology.info/ggpmisc/
    
    df <- data.frame(year = seq(1979,2010), M02 = runif(32,-4,6), 
                     M06 = runif(32, -2.4, 5.1), M07 = runif(32, -2, 7.1))
    df <- melt(df, id = c("year"))
    
    formula1 <- y ~ x
    
    ggplot(data = df, mapping = aes(x = year, y = value)) +
      geom_point() +
      scale_x_continuous() + 
      geom_smooth(method = 'lm', se = TRUE) +
      stat_poly_eq(aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~~")), 
                   label.x = "left", label.y = "top",
                   formula = formula1, parse = TRUE, size = 3) +
      facet_wrap(~ variable) 
    

    ggplot(data = df, mapping = aes(x = year, y = value)) +
      geom_point() +
      scale_x_continuous() + 
      geom_smooth(method = 'lm', se = TRUE) +
      stat_poly_eq(aes(label = paste(..eq.label.., sep = "~~~")), 
                   label.x = "left", label.y = 0.15,
                   eq.with.lhs = "italic(hat(y))~`=`~",
                   eq.x.rhs = "~italic(x)",
                   formula = formula1, parse = TRUE, size = 4) +
      stat_poly_eq(aes(label = paste(..rr.label.., sep = "~~~")), 
                   label.x = "left", label.y = "bottom",
                   formula = formula1, parse = TRUE, size = 4) +
      facet_wrap(~ variable) 
    

    reprex package (v0.2.1.9000) 于 2019 年 1 月 10 日创建

    【讨论】:

    • 如果这不明显,上例使用expand_limits(y = 8),或者第二个使用负值,将避免方程和点的重叠。如果事先不知道限制,则可以使用scale_y_continuous() 设置扩展。
    • @PedroAphalo:谢谢佩德罗!有时即使我指定leftbottom,标签仍然在情节的中间。你知道出了什么问题吗? i.imgur.com/J4ZNXMu.png
    【解决方案2】:

    可能有人会建议更好的解决方案,但作为替代方案,您可以更改 stat_smooth_func 并且可以像这样制作最后一行

    data.frame(x=1979, y=ypos, label=func_string)
    

    而不是

    data.frame(x=xpos, y=ypos, label=func_string)
    

    所以,情节如下

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 1970-01-01
      • 2015-09-13
      • 2021-08-02
      • 2014-04-12
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多