【问题标题】:How can I create facet panels from separate dataframes?如何从单独的数据框创建构面面板?
【发布时间】:2015-10-12 17:01:33
【问题描述】:

我有 6 个如下图所示的数据帧,只是“计数”值不同。数据帧被命名为 a1,a2,a3,a4,a5,a6。 a1 如下所示。

year count
1981 2
1982 8
1983 5
1984 6
1985 6
1986 4
1987 2
1988 2
1989 6
1990 5

我想制作一个 6 面板图,如下图所示

1. Panel names as a1,a2,a3,a4,a5,a6.
2. x-axis is year for each dataframe
3. y-axis is count for each dataframe

如果我有一个数据框 (Melt+Faced_Grid),我知道该怎么做。但是当数据在 6 个不同的数据帧中时,我怎么能在 ggplott2 中做同样的事情。

【问题讨论】:

  • dplyr::bind_rows(a1, a2, a3, a4, a5, a6, id = panel) 然后用构面绘图。
  • 下次把你的数据框放到in a list.
  • @Axeman 我收到此错误:找不到对象“面板”
  • 抱歉,应该改成'panel'。 Ben 的解决方案是等价的。
  • 应该是.id,而不是id。

标签: r ggplot2


【解决方案1】:
set.seed(1001)
a1 <- data.frame(year=2000:2009,count=sample(1:20,size=10,replace=TRUE))
a2 <- data.frame(year=2000:2009,count=sample(1:20,size=10,replace=TRUE))
dList <- setNames(list(a1,a2),paste0("a",1:2))

您可以使用lapply() 为每个数据集添加一个frame 列,但plyr::ldply 提供了一个快捷方式:

library("plyr")
dAll <- ldply(dList,identity,.id="frame")

您也可以使用dplyr::bind_rows,正如@Axeman 在上面的cmets 中指出的那样:

library("dplyr")
dAll <- bind_rows(a1,a2,.id="frame")

现在使用facet_wrap() 很容易:

library("ggplot2")
ggplot(dAll,aes(year,count))+geom_point()+facet_wrap(~frame)

【讨论】:

  • 谢谢。我希望我能很好地了解 R.. 你能告诉我这是在做什么:“paste0("a",1:2)" 吗?特别是a?
  • @maximusdooku 如果你运行那行代码,paste0("a", 1:2),我敢打赌你可以弄清楚它在做什么。如果遇到困难,请查看帮助?paste0。
  • 我现在明白了。谢谢。
  • 快速提问:如果我不想使用 a1、a2 等连续剧,而是想使用其他一些随机名称(例如,cow、bull、hen、sky、water、space ),我需要如何修改这部分:paste0("a",1:2)?
  • dNames &lt;- c("cow","bull","hen","water","space"); setNames(list(...),dNames)(或dList &lt;- list(...); names(dList) &lt;- dNames)
猜你喜欢
  • 1970-01-01
  • 2014-01-27
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多