Как добавить geoms в список-столбец ggplot`s - PullRequest
1 голос
/ 13 апреля 2020

Основываясь на этом вопросе, я бы добавил геомы к полученному графику по строке после того, как я переместил data.frame, чтобы получить график для каждой строки, с выделением данных строки внутри его группа.

library(tidyverse) # using  version 1.3.0
mydata <- data_frame(group = c('a', 'a', 'a', 'b', 'b', 'b'),
                     x = c(1,2,3,5,6,7),
                     y = c(3,5,6,4,3,2))
mydata2 <- mydata %>% 
  group_by(group) %>% 
  nest() %>% 
  mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = y)) + geom_point()))
mydata2
# A tibble: 2 x 3
# Groups:   group [2]
  group data             myplot
  <chr> <list>           <list>
1 a     <tibble [3 x 2]> <gg>  
2 b     <tibble [3 x 2]> <gg>  

Желаемый результат для первой строки:

mydata2$myplot[[1]] + geom_point(mapping = aes(x=1,y=3),color = "red")

enter image description here


Однако , при попытке реализовать это на невыпущенных data.frame, я терплю неудачу. Вот три мои попытки и их результаты:

mydata3 <- mydata2 %>% 
  unnest(data) %>% 
  mutate(myplot2 = myplot + geom_point(mapping = aes(x=x,y=y),color = "red"))
mydata3$myplot2[[1]]
NULL
Warning message:
Unknown or uninitialised column: `myplot2`. 


mydata4 <- mydata2 %>% 
  unnest(data) %>% 
  mutate(myplot2 = list(myplot[[1]] + geom_point(mapping = aes(x=x,y=y),color = "red")))
mydata4$myplot2[[1]]

enter image description here

Все точки стали красными! Я получил такой же вывод для этой попытки:

mydata5 <- mydata2 %>% 
  unnest(data) %>% 
  mutate(myplot2 = map(myplot,~.x + geom_point(mapping = aes(x=x,y=y),color = "red")))
mydata5$myplot2[[1]]

Итак, мой вопрос, есть ли способ получить первый график с использованием тидиверса?

1 Ответ

1 голос
/ 13 апреля 2020

Попробуйте это. Хитрость заключается в том, чтобы использовать pmap до l oop "по часовой стрелке" над x, y и myplot. Координаты x и y передаются в geom_point через аргумент данных, который представляет собой просто df с одной строкой:

library(tidyverse)
mydata <- data_frame(group = c('a', 'a', 'a', 'b', 'b', 'b'),
                     x = c(1,2,3,5,6,7),
                     y = c(3,5,6,4,3,2))

mydata2 <- mydata %>% 
  group_by(group) %>% 
  nest() %>% 
  mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = y)) + geom_point()))

mydata3 <- mydata2 %>%
  unnest(data) %>% 
  mutate(myplot2 = pmap(list(x, y, myplot), ~ ..3 + geom_point(data = data.frame(x = ..1, y = ..2), mapping = aes(x, y), color = "red")))

mydata3$myplot2[[1]]

Создано в 2020-04-13 пакетом Представления (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...