r - geom_abline 多个斜率和截距

标签 r ggplot2 tidyverse

考虑这个初始数据框(yld_sum):

  coef     pred      se    ci.lb    ci.ub    cr.lb    cr.ub Yld_class
   b0 3164.226 114.256 2940.289 3388.164 2142.724 4185.728      1Low
   b1  -20.698   3.511  -27.580  -13.816  -50.520    9.124      1Low
   b0 3985.287 133.220 3724.180 4246.394 2954.998 5015.576      2Low
   b1  -14.371   4.185  -22.573   -6.168  -44.525   15.784      2Low

如何简化语法来绘制两条估计回归线及其各自的 CI,并获得以下图?

enter image description here

这是我的详细代码:

library(tidyverse)

yld_sum_est <- yld_sum %>% select(Yld_class, coef, pred) %>% 
  spread(coef, pred)  

yld_sum_low <- yld_sum %>% select(Yld_class, coef, ci.lb) %>% 
  spread(coef, ci.lb)

yld_sum_up <- yld_sum %>% select(Yld_class, coef, ci.ub) %>% 
  spread(coef, ci.ub)

ggplot() + 
  geom_abline(data = yld_sum_est, aes(intercept = b0, slope = b1)) +
  geom_abline(data = yld_sum_low, aes(intercept = b0, slope = b1), linetype= "dashed") +
  geom_abline(data = yld_sum_up, aes(intercept = b0, slope = b1), linetype= "dashed") +
  scale_x_continuous(limits=c(0,60), name="x") +
  scale_y_continuous(limits=c(1000, 4200), name="y") 

最佳答案

这是一个“数据形状”问题。如果你想要ggplot要在一次调用中绘制多个对象,对象参数(如 interceptslope )需要是数据框的列,对象实例需要是数据输入 ggplot 时的行。 。

特别是在您的情况下,您需要一个包含 6 行的数据框 - 每行一个,每行保存该行的标识及其参数,如下所示:

library(tidyverse)

# data block from the question is in clipboard
read.table("clipboard", header = T) -> yld_sum

yld_sum %>%
  select(-starts_with("cr"), -se) %>%
  gather(metric, value, -coef, -Yld_class) %>%
  spread(coef, value) %>% 
  ggplot() +
  geom_abline(aes(
    intercept = b0, 
    slope = b1,
    linetype = if_else(metric == "pred", "", "dashed")),
    ) +
  scale_x_continuous(limits=c(0,60), name="x") +
  scale_y_continuous(limits=c(1000, 4200), name="y") +
  guides(linetype = F)

随意将 RStudio 的 View 探索数据 reshape 过程。在连续步骤后调用(如 %>% View )。

数据的最终形状,用于说明(在 spread() 调用之后):

  Yld_class metric       b0      b1
1      1Low  ci.lb 2940.289 -27.580
2      1Low  ci.ub 3388.164 -13.816
3      1Low   pred 3164.226 -20.698
4      2Low  ci.lb 3724.180 -22.573
5      2Low  ci.ub 4246.394  -6.168
6      2Low   pred 3985.287 -14.371

关于r - geom_abline 多个斜率和截距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45624655/

相关文章:

javascript - 折叠行组 Shiny

r - R中的快速采样

重新定义R包中的功能

r - 为什么连续数据的一些 fiddle 图看起来呈波浪状?

r - R : 99 icons instead of 100 icons 中的华夫饼图

r - 用于公式中的 eval 解析的包装函数

r - 对 geom_line 和 x 轴之间的区域进行着色

r - 按更高的分类、丝和属对图例进行分组? ggplot2

r - n() 在 summarise_at() 中使用时行为不一致

r - 将所有二元 (0, 1, NA) 变量转换为因子