1

我在 R 中有以下数据:

id <- factor(seq(1:72))
initial.e <- rnorm(n=72, mean = 21.51, sd = 6.58)
initial.f <- rnorm(n = 72, mean = 20.75, sd = 3.378)

final.e <- rnorm(n = 72, mean = 19.81, sd = 7.48)
final.f <- rnorm(n = 72, mean = 19.77, sd = 5.389)

data <- data.frame(id,initial.e, initial.f, final.e, final.f)

e我需要为和创建一个带有两条直线趋势线的散点图f,但我不知道如何创建它。我找到了这篇文章:https ://sakaluk.wordpress.com/2015/08/27/6-make-it-pretty-plotting-2-way-interactions-with-ggplot2/我尝试过,但没有以我想要的方式工作。

我也尝试使用meltfrom reshape2package ,但我无法让图表显示我想要的方式 - 在散点图中有两条趋势e线f

datamelt <- melt(data, id = 'id')
datamelt <- datamelt %>% mutate(names = ifelse(datamelt$variable %in% c('initial.e', 'initial.f'), 'Before', 'After'))

datamelt <- datamelt %>% mutate(types = ifelse(datamelt$variable %in% c('final.e', 'final.f'), 'e', 'f'))

在这之后,事情就走下坡路了。我尝试的所有代码要么有一些基本的散点图,geom_smooth()要么只是一些一般性错误。

编辑

该图应包含散点图,其中包含趋势线之间的关系,以及intial.e同一图中的趋势线之间的关系。initial.ffinal.efinal.f

4

2 回答 2

1

这样的事情怎么样?

data %>%
    gather(k, value, -id) %>%
    mutate(
        state = gsub("(\\.e$|\\.f$)", "", k),
        what = gsub("(initial\\.|final\\.)", "", k)) %>%
    ggplot(aes(id, value, colour = what)) +
    geom_line() +
    facet_wrap(~ state)

在此处输入图像描述

或者用积分

data %>%
    gather(k, value, -id) %>%
    mutate(
        state = gsub("(\\.e$|\\.f$)", "", k),
        what = gsub("(initial\\.|final\\.)", "", k)) %>%
    ggplot(aes(id, value, colour = what)) +
    geom_line() +
    geom_point() + 
    facet_wrap(~ state)

在此处输入图像描述


更新

data %>%
    gather(k, value, -id) %>%
    mutate(
        state = gsub("(\\.e$|\\.f$)", "", k),
        what = gsub("(initial\\.|final\\.)", "", k)) %>%
    select(-k) %>%
    spread(state, value) %>%
    ggplot(aes(x = initial, y = final, colour = what, fill = what)) +
    geom_smooth(fullrange = T, method = "lm") +
    geom_point()

在此处输入图像描述

我们展示了基于简单线性回归的趋势线,包括置信区间(使用insidelm禁用)。你也可以用里面来表现出黄土的趋势。有关更多详细信息,请参阅。se = Fgeom_smoothmethod = loessgeom_smooth?geom_smooth

于 2018-06-07T03:50:49.720 回答
1

我认为你正在寻找的是这样的:我没有测试过代码,但它应该给你一个想法

ggplot(data) + 
  geom_point(aes(x=initial.e, y=initial.f)) +
  geom_smooth(method = "lm", se = FALSE, aes(initial.e, final.e)) + 
  geom_point(aes(x=final.e, y = final.f)) +
  geom_smooth(method = "lm", se = FALSE, aes(final.e, final.f))
于 2018-06-07T09:34:37.883 回答