绘图使用ggplot2绘制数据帧列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绘图使用ggplot2绘制数据帧列表相关的知识,希望对你有一定的参考价值。
我的目标是使用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(例如做散点图)来遍历我的列表将是有用且更容易阅读的。在我的例子中,我最终会得到三张图。
答案
你想要做的事实上可能是:
ggplot(Dataframe_A) +
geom_point(aes(x = y1, y = y2)) +
facet_grid(y3 ~ y4)
考虑使用美学来避免有太多的情节。
ggplot(Dataframe_A) +
geom_point(aes(x = y1, y = y2, colour = y3)) +
facet_wrap(~y4)
可能性是无止境:
ggplot(Dataframe_A) +
geom_point(aes(x = y1, y = y2, colour = y3, shape = y4), size = 5)
另一答案
就像我在上面的评论中所说的那样,如果你需要处理单独的数据帧,那么用数据帧列表来解决这个问题并没有错。想想你的意图。当我需要为不同的组重复相同类型的绘图时,我经常这样做,每个绘图都需要各自独立的输出。当你有理由比较群体时,分面是很好的 - 想想它们就像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)
以上是关于绘图使用ggplot2绘制数据帧列表的主要内容,如果未能解决你的问题,请参考以下文章