使用ggplot2进行绘制以绘制数据帧列表

时间:2019-03-06 16:47:48

标签: r list loops dataframe ggplot2

我的目标是使用ggplot2绘制几个数据帧(它们都具有相同的结构)。我需要读取一个csv文件,以便得到一个数据框,然后将其拆分,这给出了带有datframes的列表。

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]]到达第一个数据帧,但是我的列表中有20个数据帧,并使用ggplot(例如做散点图)遍历列表将是有用且容易的阅读。在我的示例中,我将得到三个图。

2 个答案:

答案 0 :(得分:1)

您实际上想做的事情可能是:

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

答案 1 :(得分:1)

就像我在上面的评论中说的那样,如果有一个原因需要您在单独的数据帧上工作,那么用数据帧列表进行处理就没错了。只是想想你的意图。当我需要对不同的组重复使用相同类型的图而每个组都需要自己的单独输出时,通常会这样做。当您有理由比较组时,构面非常有用,例如small multiples这样的组。

您可以使用跨列表使用的函数来创建图。我属于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

reprex package(v0.2.1)于2019-03-06创建