Как создать две линии и разбросать графики с помощью ggplot - PullRequest
0 голосов
/ 07 июня 2018

У меня есть следующие данные в 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/, которую я пытался выполнить, но не работал так, как хотел.

Я также пытался использовать melt из пакета reshape2, но я не могу получить графики, чтобы показать, как я хочу - с двумя линиями тренда для 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.f с линией тренда и другое отношение между final.e и final.fс линией тренда на том же графике.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я думаю, что вы ищете что-то вроде этого: я не тестировал код, но он должен дать вам представление

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))
0 голосов
/ 07 июня 2018

Как насчет этого?

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)

enter image description here

Или с точками

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)

enter image description here


Обновление

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()

enter image description here

Мы показываем линию тренда на основе простоголинейная регрессия lm, включая доверительный интервал (отключить с помощью se = F внутри geom_smooth).Вы также можете показать тренд потерь с method = loess внутри geom_smooth.См. ?geom_smooth для более подробной информации.

...