【问题标题】:In R: how to remove gaps in date-time series plot when using posixct for date-time column?在 R 中:使用 posixct 作为日期时间列时如何消除日期时间序列图中的空白?
【发布时间】:2017-10-18 19:10:49
【问题描述】:

这是一个我在网上找不到任何帮助的问题。

这里是原始数据的链接(太大,无法粘贴在这里): https://drive.google.com/open?id=0B5KaRU02aEnAbnM5ODNPMkYxN0E

这是它的结构

> str(dfsite)
'data.frame':   11712 obs. of  8 variables:
 $ Site_ID      : chr  "02AB08-001" "02AB08-001" "02AB08-001" "02AB08-001" ...
 $ Deployment_ID: num  15352 15352 15352 15352 15352 ...
 $ RecDate      : chr  "01-07-2007" "01-07-2007" "01-07-2007" "01-07-2007" ...
 $ RecTime      : chr  "00:00:00" "00:30:00" "01:00:00" "01:30:00" ...
 $ Temperature  : num  19.5 19.5 19.6 19.6 19.6 ...
 $ TimeStep     : num  30 30 30 30 30 30 30 30 30 30 ...
 $ RecYr        : Factor w/ 19 levels "1996","1997",..: 12 12 12 12 12 12 12 12 12 12 ...
 $ RecDT        : POSIXct, format: "2007-07-01 00:00:00" "2007-07-01 00:30:00" "2007-07-01 01:00:00" "2007-07-01 01:30:00" ...

RecDT 列包含多年来 7 月整个月份从 00:00:00 到 23:30:00 的每日数据: 1) 2007-07-01 00:00:00-23:30:00 到 2007-07-30 00:00:00-23:30:00 2) 2009-07-01 00:00:00-23:30:00 到 2009-07-30 00:00:00-23:30:00 ...

我想为每年创建一个时间序列图,显示特定 site_id 的 7 月 1 日至 30 日。

我当前的代码创建了一个时间序列图 - 对于所有月份,但它应该只有 7 月份 - 多年来,但它应该为不同年份创造方面

# original data
df <- excel file
# extract year only
df["RecYr"] <- substr(df$RecDate,7,10)
df$RecYr <- as.factor(df$RecYr)

#extract date and time
df["RecDT"] <- paste(df$RecDate,df$RecTime)
df$RecDT <- as.character(df$RecDT)
df$RecDT <- as.POSIXct(df$RecDT,"%d-%m-%Y %H:%M:%S", tz="UTC")

# select specific site
dfsite <- df[df$Site_ID == "02AB08-001",]

# import ggplot2 and create plot
library(ggplot2)
p <- ggplot(dfsite, aes(x=dfsite$RecDT, y=dfsite$Temperature))  + 
  geom_point() +
print(p)

here is my plot

非常感谢您。

【问题讨论】:

  • 您是否有机会使用dput() 共享数据?如果您提供complete minimal reproducible example 来回答您的问题,我们更有可能为您提供帮助。我们可以从中工作并使用它来向您展示如何回答您的问题。另外,欢迎!
  • @EricFail 请参阅数据集的谷歌驱动器链接。谢谢。
  • 您可以进行任何更改,即最小,可以重现问题的数据集?
  • @EricFail 很抱歉,但我很难在不改变问题目的的情况下减少数据。我不知道如何操作不同的时间尺度,因此我必须提供 30 分钟的间隔数据。

标签: r datetime ggplot2 posixct


【解决方案1】:

一个简单的解决方案可能是:

x <- cumsum(table(dfsite$RecYr))
x <- cbind(c(1,x[-length(x)]),x)
xseq <- c(apply(x,1,function(kk) round(seq(kk[1],kk[2],length.out=3))))

p <- ggplot(dfsite, aes(x=1:nrow(dfsite), y=Temperature))  + 
  geom_point() + facet_grid(.~RecYr, scale="free_x") +
  scale_x_continuous("Time", breaks=xseq, 
        labels = dfsite$RecDT[xseq])+
theme(axis.text.x=element_text(angle=45,hjust=1))
print(p)

【讨论】:

    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多