【问题标题】:Generating multiple plots using ID in ggplot在ggplot中使用ID生成多个图
【发布时间】:2015-07-30 18:39:17
【问题描述】:

我有一个大型数据集(约 140000 个值),我想为其绘制图表。 数据由一个值、一个时间戳和一个 ID 号组成。 ID 号使用时间戳将值组合成一个持续时间(例如每 10 分钟、1 小时等)。在前 10 分钟内标记时间戳的每个值都被分配一个 1。这将一直持续到所有值都分配一个组号。这给了我一千多个唯一的组 ID 号。
该图是一个直方图,x 轴具有值范围(例如 1:2、2:3、3:4 等)。 Y 轴是属于每个范围的采样值的比例。 我用来为所有数据生成绘图的代码如下所示:
ggplot(ICICLICKS1, aes(x=ICIms))+ geom_histogram(aes(y=..count../sum(..count..)),binwidth=2) + scale_x_continuous(limits=c(1.5,140), breaks = seq(0,140,5))+ scale_y_continuous(limits=c(0.0,0.25))+ geom_vline(xintercept=c(10,50))+ xlab("ICI(ms)")+ ylab("Proportion")+ ggtitle("Histogram of Porpoise Inter-click Intervals")

我的最终目标是每 10 分钟有一个情节。因为那将是几千个图,我需要找到一种方法让 R 运行代码,绘制 ID 号为 1 的所有值,导出图,绘制 ID 号为 2 的所有值,导出图等......直到所有ID 号已运行。 有没有办法编写一个循环或其他一些代码来完成这个?

【问题讨论】:

  • This question 可能会让您开始为每个组制作单独的情节。
  • 似乎您只想在 ICICLICKS1 上使用 subset 将代码包装在一个循环中。
  • 如果我们将您的情节称为p,您可以使用ggsave("all.pdf", marrangeGrob(dlply(ICICLICKS1, "ID", "%+%", e1 = p), ncol=1, nrow=1))。诚然,不完全透明,但简洁。

标签: r loops plot ggplot2


【解决方案1】:

按照 jonhson_shuffle 的建议,这将为您制作一千张图:

for(i in 1:max(ICICLICKS1$ID)) { 
  ggplot(subset(ICICLICKS1,ID==i), aes(x=ICIms))+
    geom_histogram(aes(y=..count../sum(..count..)),binwidth=2) +
    scale_x_continuous(limits=c(1.5,140), breaks = seq(0,140,5))+
    scale_y_continuous(limits=c(0.0,0.25))+
    geom_vline(xintercept=c(10,50))+
    xlab("ICI(ms)")+
    ylab("Proportion")+
    ggtitle("Histogram of Porpoise Inter-click Intervals")
  ggsave(paste("plot",i,".pdf"))
}

我个人不想浏览一千张图,所以我每小时将它们分组并使用facet_wrap(~ID) 每 10 分钟间隔显示一次(每小时 6 张图)。或者将它们分组为白天和黑夜。看看你的主题可能很有趣;-)。

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 2021-09-25
    • 1970-01-01
    • 2022-01-09
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多