Plotting для использования ggplot2 для построения списка данных - PullRequest
1 голос
/ 06 марта 2019

Моя цель - построить несколько фреймов данных (все они имеют одинаковую структуру), используя ggplot2.Мне нужно прочитать CSV-файл, чтобы я получил один фрейм данных, а затем разделил его, который дает мне список с моими фреймами данных.

Dataframe_A <- read.csv("mycsv.csv")
Dataframe_A_split <- split.data.frame(Dataframe_A, list(Dataframe_A$V1,Dataframe_A$V2), drop=TRUE)

Dataframe_A <- data.frame(y1 = c(1, 2, 3,4,5,6,7,9,0,1), y2 = c(1, 3, 3,4,7,6,14,9,7,1), y3 =c("Yes","No","No","Yes","No","No","Yes","No","No","No"), y4=c("A","A","B","A","A","B","A","A","B","A"))
Dataframe_A_split<-split.data.frame(Dataframe_A, list(Dataframe_A$y3, Dataframe_A$y4), drop=TRUE)

$No.A
   y1 y2 y3 y4
2   2  3 No  A
5   5  7 No  A
8   9  9 No  A
10  1  1 No  A

$Yes.A
  y1 y2  y3 y4
1  1  1 Yes  A
4  4  4 Yes  A
7  7 14 Yes  A

$No.B
  y1 y2 y3 y4
3  3  3 No  B
6  6  6 No  B
9  0  7 No  B

Я знаю, что могу использовать Dataframe_A_split [[1]], чтобы добраться до первого фрейма данных, но у меня есть двадцать фреймов данных в моем списке и использование ggplot (например, для построения точечной диаграммы) для циклического прохождения моегоСписок будет полезен и удобен для чтения.В моем примере я бы получил три графика.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Как я уже сказал в своем комментарии выше, если есть причина, по которой вам нужно работать с отдельными фреймами данных, не стоит ошибаться со списком фреймов данных. Просто подумай о своих намерениях. Я делаю это часто, когда мне нужен один и тот же тип сюжета, повторяемый для разных групп, каждая из которых нуждается в отдельном выводе. Аспекты отлично подходят для случаев, когда у вас есть основания сравнивать группы - думайте о них как о , кратных .

Вы можете использовать функцию, которая работает по списку, для создания графиков. Я неравнодушен к семье purrr::map_*, но базовая семья apply тоже работает. Использование imap дает вам доступ к именам, созданным путем разделения, поэтому вы можете легко идентифицировать графики.

library(tidyverse)

plot_list <- Dataframe_A_split %>%
  imap(function(df, name) {
    ggplot(df, aes(x = y1, y = y2, color = y3)) +
      geom_point() +
      labs(title = name)
  })

plot_list$Yes.A

Создано в 2019-03-06 пакетом представ. (v0.2.1)

1 голос
/ 06 марта 2019

То, что вы хотите сделать, на самом деле, вероятно:

ggplot(Dataframe_A) +
  geom_point(aes(x = y1, y = y2)) +
  facet_grid(y3 ~ y4)

enter image description here

Подумайте об использовании эстетики, чтобы избежать слишком большого количества сюжетов.

ggplot(Dataframe_A) +
  geom_point(aes(x = y1, y = y2, colour = y3)) +
  facet_wrap(~y4)

enter image description here

Возможности безграничны:

ggplot(Dataframe_A) +
  geom_point(aes(x = y1, y = y2, colour = y3, shape = y4), size = 5)

enter image description here

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