【问题标题】:Drawing one graph contains all information of data gathered in different phases and in different treatment groups绘制一张图包含在不同阶段和不同治疗组中收集的所有数据信息
【发布时间】:2021-01-23 12:40:27
【问题描述】:

我需要绘制一个图表来显示因变量 Y 和自变量 X 之间的简单线性关系。问题是 X 属于不同阶段和轮次的数据收集过程,X 也属于 2 个不同的治疗组。我想在一张图中显示所有内容,我想到的是垂直轴仍然是 Y,但水平轴将是“圆形”;图表上的线条代表每个治疗和阶段的 Y 和 X 之间的线性关系(因此会有 4 条回归线),最后颜色将定义治疗。

这是一个示例数据框:

phase <- c(rep(1,10),rep(2,10))
treatment <- c(rep("A",5), rep("B",5), rep("A",5), rep("B",5))
round <- c(rep(seq(1,5,1),2),rep(seq(6,10,1),2))
x <- c(seq(10,18,2),seq(10,2,-2),seq(18,10,-2),seq(2,10,2))
y <- 1+0.5*x

df <- data.frame(phase,treatment,round,x,y)
col <- c("Phase", "Treatment","Round","X","Y")
colnames(df) <- col
df

这就是我的想法:

图表的绘制

【问题讨论】:

    标签: r graph linear-regression


    【解决方案1】:

    ggplot2 中使用分面来分隔两个图。
    但首先我将重新创建数据集,以便在点 y 坐标中产生一点噪音。数据结构保持不变。

    set.seed(2020)
    phase <- c(rep(1,10),rep(2,10))
    treatment <- c(rep("A",5), rep("B",5), rep("A",5), rep("B",5))
    round <- c(rep(seq(1,5,1),2),rep(seq(6,10,1),2))
    x <- c(seq(10,18,2),seq(10,2,-2),seq(18,10,-2),seq(2,10,2))
    y <- 1 + 0.5*x + rnorm(length(x))
    
    df <- data.frame(phase,treatment,round,x,y)
    col <- c("Phase", "Treatment","Round","X","Y")
    colnames(df) <- col
    

    剧情

    现在剧情。请注意,我还更改了构面的标签,使其更具描述性。

    library(ggplot2)
    
    df$Phase <- factor(df$Phase)
    phase_names <- c(
      `1` = "Phase 1",
      `2` = "Phase 2"
    )
    
    ggplot(df, aes(Round, Y, colour = Treatment)) +
      geom_point() +
      geom_smooth(method = "lm", formula = y ~ x, se = FALSE) +
      scale_color_manual(breaks = c("A", "B"), values = c("green", "red")) +
      facet_grid(. ~ Phase, labeller = labeller(Phase = as_labeller(phase_names)))
    


    在下面的comment 之后,这里是相同的代码,但带有x = X,而不是x = Round

    ggplot(df, aes(X, Y, colour = Treatment)) +
      geom_point() +
      geom_smooth(method = "lm", formula = y ~ x, se = FALSE) +
      scale_color_manual(breaks = c("A", "B"), values = c("green", "red")) +
      facet_grid(. ~ Phase, labeller = labeller(Phase = as_labeller(phase_names)))
    

    【讨论】:

    • 您好,谢谢您的回答,坐标轴和颜色正确。但正如我所见,没有回归线显示 Y 和 X 之间的关系,这是我主要关心的问题。我的真实数据更复杂,数据点没有像提供的样本数据那样相互连接形成一条直线。所以我的主要问题是如何在一张图上显示 4 条不同的回归线。
    • 非常感谢,我没有注意到 geom_smooth 可以解决这个问题。祝你有美好的一天:D
    • 嗨@Rui,经过一番检查,似乎 geom_smooth(method = "lm", formula = y ~ x, se = FALSE) 将 y 作为“Y”,将 x 作为“Round”,不像我们想要的那样“X”。我试图用新的 a 序列替换 (X,Y) y
    • @nemaxx 是的,你是对的,geom_smooth 正在接受x = Round。我基于您发布的图表,x 轴标记为round。编辑后查看,使用原始 X 值。
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多