绘图使用ggplot2绘制数据帧列表

问题描述 投票:1回答:2

我的目标是使用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]]来获取第一个数据帧,但是我的列表中有20个数据帧,并且使用ggplot(例如做散点图)来遍历我的列表将是有用且更容易阅读的。在我的例子中,我最终会得到三张图。

r list loops dataframe ggplot2
2个回答
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
投票

就像我在上面的评论中所说的那样,如果你需要处理单独的数据帧,那么用数据帧列表来解决这个问题并没有错。想想你的意图。当我需要为不同的组重复相同类型的绘图时,我经常这样做,每个绘图都需要各自独立的输出。当你有理由比较群体时,分面是很好的 - 想想它们就像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创建于2019-03-06(v0.2.1)

© www.soinside.com 2019 - 2024. All rights reserved.