Объединить разброс и барплот - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь добавить график рассеяния и барплот в пределах одной области графика с помощью ggplot. Диаграмма рассеяния должна быть средней величиной от var. «1» больше, чем «2» для одного набора данных, и барплот должен быть средним значением «1» по моему контрольному набору данных.

Мои данные выглядят так:

> dput(lapply(ubbs6, head))
list(structure(c(96L, 96L, 100L, 88L, 93L, 100L, 61L, 61L, 70L, 
40L, 58L, 70L, 7807L, 7357L, 7695L, 6400L, 6009L, 7735L), .Dim = c(6L, 
3L), .Dimnames = list(NULL, c("1", "2", "3"))), structure(c(99L, 
96L, 100L, 96L, 96L, 96L, 66L, 67L, 70L, 63L, 57L, 62L, 7178L, 
6028L, 6124L, 6082L, 6873L, 5629L, 31L, 27L, 60L, 42L, 12L, 18L
), .Dim = c(6L, 4L), .Dimnames = list(NULL, c("1", "2", 
"3", "4"))), structure(c(99L, 95L, 95L, 100L, 96L, 95L, 69L, 
58L, 56L, 70L, 61L, 65L, 6067L, 6331L, 6247L, 5988L, 7538L, 6162L, 
50L, 36L, 67L, 10L, 55L, 70L), .Dim = c(6L, 4L), .Dimnames = list(
    NULL, c("1", "2", "3", "4"))))

Пример того, что я пробовал до сих пор:

 aggregate(ubbs6[[2]][,'1'], list(ubbs6[[2]][,'2']), mean)

m162 <- aggregate(ubbs6[[2]][,'1'], list(ubbs6[[2]][,'2']), mean)
m163 <- aggregate(ubbs6[[3]][,'1'], list(ubbs6[[3]][,'2']), mean)
m161 <- mean(ubbs6[[1]][,'1'])

ggplot(m162, aes_(x = m162[,'Group.1'], y = m162[,'x']))+
  geom_point()+
  geom_smooth(method = 'lm', formula = 'y ~ sqrt (x)')

Я бы хотел сделать две вещи:

  1. добавить барплот из одного значения x, y моего набора управления (ubbs6 [[1]])
  2. добавьте это в структуру структуры, чтобы я мог сделать это для 11 аналогичных наборов данных

    Любая помощь будет принята с благодарностью!

** РЕДАКТИРОВАТЬ: отредактированы конкретные детали, которые не нужны другим для понимания кода **

1 Ответ

0 голосов
/ 05 ноября 2018

Сохраняя ваши данные в d, вы можете попробовать

ggplot(as.data.frame(d[[2]]),aes(age, FPAR) ) + 
   coord_cartesian(ylim = c(90,100)) +
   geom_point() + 
   geom_smooth(method = 'lm', formula = 'y ~ sqrt (x)') + 
   geom_col(data=data.frame(x=max(as.data.frame(d[[2]])$age),
                       y=mean(as.data.frame(d[[1]])$FPAR)),
                       aes(x,y), inherit.aes = FALSE)

enter image description here

Вы должны использовать coord_cartesian для указания пределов y и inherit.aes = FALSE. В противном случае столбец отображается неправильно.

Если вам нужно объединить второй и третий кадры данных в одном графике, вы можете попробовать

library(tidyverse)
d %>% 
  .[2:3] %>% 
  map(as.data.frame) %>% 
  bind_rows(.id = "id") %>% 
  mutate(max = max(age),
         Mean = mean(d[[1]][1])) %>% 
  ggplot(aes(age, FPAR, color=id)) +
   geom_point() + 
   geom_smooth(method = 'lm', formula = 'y ~ sqrt (x)', se=FALSE) + 
    geom_col(data = . %>% distinct(max, Mean),
             aes(max, Mean), inherit.aes = FALSE)

enter image description here

...