【问题标题】:Printing overlapping points ggplot2 Time series data打印重叠点ggplot2时间序列数据
【发布时间】:2013-12-19 21:35:35
【问题描述】:

我正在绘制一些数据记录的开始和结束时间。下面是我正在使用的数据框,而不是我制作的数据框。本质上,我有 2 个循环遍历我的数据,以查找每个循环的开始和结束时间,然后生成一个数据框,然后将其粘贴到“原始数据”中。

现在我想提示我的查看器了解每个离散数据集的开始时间和结束时间是什么,暂时只需用不同颜色标记“开始”和“结束”的点就足够了。老实说,如果可能的话,我希望使用我选择的点作为角点,在场景周围绘制一个带有褪色背景和交替颜色的框。这样第一个“开始”点是 1 个角,第一个“结束”点是下一个角。没有任何线索是可能的,尽管我认为我会在跑步之前爬行。

下面是我正在使用的数据框和我用来标记点的 ggplot2 函数。

老实说,我觉得这是一个非常简单的问题,因为我对 ggplot 如何映射点或数据优先级缺乏了解。

require(ggplot2)

dataraw <- structure(list(Time = c(1383817893L, 1383817970L, 1383818010L, 
        1383818080L, 1383818170L, 1383818250L, 1383817923L, 1383818003L, 
        1383818043L, 1383818113L, 1383818203L, 1383818286L, 1383817890L, 
        1383817893L, 1383817896L, 1383817899L, 1383817902L, 1383817905L, 
        1383817908L, 1383817911L, 1383817914L, 1383817917L, 1383817920L, 
        1383817923L, 1383817970L, 1383817973L, 1383817976L, 1383817979L, 
        1383817982L, 1383817985L, 1383817988L, 1383817991L, 1383817994L, 
        1383817997L, 1383818000L, 1383818003L, 1383818010L, 1383818013L, 
        1383818016L, 1383818019L, 1383818022L, 1383818025L, 1383818028L, 
        1383818031L, 1383818034L, 1383818037L, 1383818040L, 1383818043L, 
        1383818080L, 1383818083L, 1383818086L, 1383818089L, 1383818092L, 
        1383818095L, 1383818098L, 1383818101L, 1383818104L, 1383818107L, 
        1383818110L, 1383818113L, 1383818170L, 1383818173L, 1383818176L, 
        1383818179L, 1383818182L, 1383818185L, 1383818188L, 1383818191L, 
        1383818194L, 1383818197L, 1383818200L, 1383818203L, 1383818250L, 
        1383818253L, 1383818256L, 1383818259L, 1383818262L, 1383818265L, 
        1383818268L, 1383818271L, 1383818274L, 1383818277L, 1383818280L, 
        1383818283L, 1383818286L), value = c(4307L, 4748L, 5419L, 4663L, 
        4779L, 4532L, 5539L, 4589L, 5541L, 5403L, 5277L, 5183L, 4246L, 
        4307L, 4368L, 4416L, 4930L, 5417L, 5444L, 5461L, 5485L, 5507L, 
        5520L, 5539L, 4748L, 4730L, 4741L, 4706L, 4717L, 4684L, 4673L, 
        4673L, 4660L, 4651L, 4585L, 4589L, 5419L, 5463L, 5487L, 5510L, 
        5513L, 5535L, 5535L, 5538L, 5532L, 5543L, 5534L, 5541L, 4663L, 
        4632L, 4598L, 4586L, 4577L, 4565L, 4546L, 5316L, 5348L, 5340L, 
        5363L, 5403L, 4779L, 4790L, 4790L, 4779L, 4762L, 4771L, 5249L, 
        5294L, 5286L, 5290L, 5267L, 5277L, 4532L, 4361L, 4327L, 4319L, 
        4307L, 4288L, 4285L, 5098L, 5151L, 5158L, 5163L, 5177L, 5183L
        ), variable = c("Start", "Start", "Start", "Start", "Start", 
        "Start", "End", "End", "End", "End", "End", "End", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1", 
        "rawPressure1", "rawPressure1", "rawPressure1", "rawPressure1"
        )), .Names = c("Time", "value", "variable"), row.names = c(NA, 
        85L), class = "data.frame")


    p <- ggplot(dataraw,aes(Time, value,group=variable)) +
                geom_point(aes(colour=variable))

编辑:这是找到“开始”和“结束”的上一个循环,这确实复制了数据。如下所述,最好将 start 和 end 添加为一个因素,而不是将其复制并添加为变量。

dataraw <-structure(list(Time = c(1383817890L, 1383817893L, 1383817896L, 
1383817899L, 1383817902L, 1383817905L, 1383817908L, 1383817911L, 
1383817914L, 1383817917L, 1383817920L, 1383817923L, 1383817970L, 
1383817973L, 1383817976L, 1383817979L, 1383817982L, 1383817985L, 
1383817988L, 1383817991L, 1383817994L, 1383817997L, 1383818000L, 
1383818003L, 1383818010L, 1383818013L, 1383818016L, 1383818019L, 
1383818022L, 1383818025L, 1383818028L, 1383818031L, 1383818034L, 
1383818037L, 1383818040L, 1383818043L, 1383818080L, 1383818083L, 
1383818086L, 1383818089L, 1383818092L, 1383818095L, 1383818098L, 
1383818101L, 1383818104L, 1383818107L, 1383818110L, 1383818113L, 
1383818170L, 1383818173L, 1383818176L, 1383818179L, 1383818182L, 
1383818185L, 1383818188L, 1383818191L, 1383818194L, 1383818197L, 
1383818200L, 1383818203L, 1383818250L, 1383818253L, 1383818256L, 
1383818259L, 1383818262L, 1383818265L, 1383818268L, 1383818271L, 
1383818274L, 1383818277L, 1383818280L, 1383818283L, 1383818286L
), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), .Label = "rawPressure1", class = "factor"), value = c(4246L, 
4307L, 4368L, 4416L, 4930L, 5417L, 5444L, 5461L, 5485L, 5507L, 
5520L, 5539L, 4748L, 4730L, 4741L, 4706L, 4717L, 4684L, 4673L, 
4673L, 4660L, 4651L, 4585L, 4589L, 5419L, 5463L, 5487L, 5510L, 
5513L, 5535L, 5535L, 5538L, 5532L, 5543L, 5534L, 5541L, 4663L, 
4632L, 4598L, 4586L, 4577L, 4565L, 4546L, 5316L, 5348L, 5340L, 
5363L, 5403L, 4779L, 4790L, 4790L, 4779L, 4762L, 4771L, 5249L, 
5294L, 5286L, 5290L, 5267L, 5277L, 4532L, 4361L, 4327L, 4319L, 
4307L, 4288L, 4285L, 5098L, 5151L, 5158L, 5163L, 5177L, 5183L
), dt = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 47L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 7L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 37L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 57L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
47L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, NA)), .Names = c("Time", 
"variable", "value", "dt"), row.names = c(NA, -73L), class = "data.frame")

这是通过下面的循环推入的数据框。

这些循环只是简单地提取出我认为是每个离散数据集的开始和结束时间。而不是 Rbind 点,我应该向数据点添加一个因子。

Start <- data.frame()

for (i in 2:(length(dataraw[,1])-1))
{
  if (( i == 2) ||  (dataraw$dt[i-1] > 3 && dataraw$dt[i]==3)) { 
  Start <- rbind(Start,c(dataraw[i,1],dataraw[i,3]))

  }

  {next}
}
colnames(Start) <- c('Time','value')
Start$variable <- paste("Start")

End <- data.frame()
for (i in 1:(length(dataraw[,1])))
{ 
  if (( dataraw$dt[i] > 3 && dataraw$dt[i-1]==3) || is.na(dataraw$dt[i])==TRUE) { 
    End <- rbind(End,c(dataraw[i,1],dataraw[i,3]))

  }

{next}
}
colnames(End) <- c('Time','value')
End$variable <- paste("End")
Events <- rbind(Start,End)
dataraw <- dataraw[,1:3]
dataraw <- rbind(Events,dataraw)

【问题讨论】:

    标签: r ggplot2 time-series duplicate-data


    【解决方案1】:

    认为您的数据可能以错误的形式用于您尝试执行的操作。

    开始和结束时间似乎是作为新点而不是旧点的属性创建的?所以 ggplot 在同一时间和 rawPressure1 绘制两个点,隐藏彩色点。

    编辑:如果在循环结束时,不要使用 rbind 来组合数据帧,而是使用合并,然后去掉多余的列。这将创建一个数据框,其中包含点、它们的值和一个因素,即开始、结束或 NA。然后可以使用这个新因子为点着色。

    所以在循环的最后一行添加这两行

    data <- merge(x = dataraw, y = Events, by = "Time", all.x = T)
    data <- data[,c(1,3,5)]
    

    这将创建具有开始/结束作为适当时间属性的数据框。

    然后像以前一样绘制

    p <- ggplot(data,aes(Time, rawPressure1))+
               geom_point(aes(colour= factor(pos)))
    p
    

    【讨论】:

    • 你在我的问题上是正确的。这些是重复的数据点。因为它们是从整个集合中取出并使用循环提取出来的。除了铸造它们,我可以让它们成为过程中的一个因素吗?因为这在我想做的事情中看起来是正确的,但我宁愿按照你的建议去做并将它变成一个属性而不是一个重复的数据点。我将编辑我的帖子并添加我的循环示例以实现可重复性。
    • 正确,希望编辑中的代码有帮助?首先使用循环来获得正确的格式。如果您添加另一列作为描述每个点所在的集合的变量,那么您可以使用 facet_grid 将每个集合放入自己的框中。目前没有偶数点,所以很难看出你的集合应该在哪里?
    【解决方案2】:

    如果我理解你的正确(你的主要问题是情节)你应该尝试一个 qplot;

    看看这个tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 2021-09-19
      • 2020-01-15
      • 2017-03-04
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多