在ggplot中手动缩放X轴,绘制POSIXct。

问题描述 投票:0回答:1

我试图绘制这个风速数据,X轴上显示年份。数据框架设置为

wsAvg<-data.frame(date=as.POSIXct(ws07$date[1224:1559]),u.1=(ws07$u[1224:1559]),stringsAsFactors = FALSE)
wsAvg<-rbind(wsAvg,c(date=as.POSIXct(ws08$date[1032:1367]),(ws08$u[1032:1367])))

而下面用ggplot来绘制我的风速数据框。

ggplot(wsAvg,aes(x=date,y=as.numeric(u.1)))+geom_point(size=3,pch=2)+
  geom_smooth(method="lm",colour="black",se=FALSE)+
  #scale_x_datetime(limits=as.POSIXct(c('2006-09-01','2016-10-01')),breaks=date_breaks("1 year"),labels=date_format("%Y"))+ 

enter image description here

如果不使用 scale_x_datetime() 在我的命令中,我得到了这些日期。当我在命令中加入 scale_x_datetime() 函数来手动缩放我的X轴,使其只显示年份。我所有的数据都排到了2007年。有谁知道这是为什么?enter image description here

r ggplot2 posixct
1个回答
0
投票

由于我们对你的任何数据都不清楚,所以很难提供你问题的答案。 说到这里,让我们看看您提供的信息,看看您的问题可能的根源在哪里。

这个问题显然与位于你的 "日期 "列中的格式化数据有关。 最好是循序渐进地看,在每一步都进行测试,看看这里会出什么问题。

  • 你的原始数据 很可能没什么问题 错的 与您的基础数据,但我们不知道来自 "日期 "向量的格式。ws07$date[1224:1559]ws08$date[1032:1367]. 你的原始数据来源于两个数据帧,所以只要确认这两个向量的原始数据的格式是相同的,但更重要的是,它是否是 已经格式化为日期? 什么是 class(ws08$date)? 另外,如果你取该数据集的样本,数据是什么样子的? (例如:? ws07$date[sample(1224:1559, 20)]).

  • 转换为POSIXct。 你展示的第一段代码包括 as.POSIXct() 包括论证 format=. 你可能需要,也可能不需要指定,但我建议 查阅文件 以确保你正确使用该函数。 你可以尝试转换一小部分数据的子集,只用 as.POSIXct(ws07$date[1224:1250]) 或类似的东西。 它给你的日期格式正确吗? 如果没有,请尝试指定 format= arg,直到它按照您的意图 "工作"。

  • 初始绘图和第二次绘图 数据在第一张图中是分散的,很可能是你预期的那种。 第一幅图中的月日组合如何--它们是否正确? 如果它们是正确的,这可能表明年份被读错了,因为显然所有的日期都集中在2007年的5月和6月。 比较第一张图和第二张图,没有明显的问题。scale_x_datetime() 这里。 这两张图与x值=2007年5-6月之间的数据一致。

一句话。很难判断你到底是哪里出了问题,但很可能是(1)在转换为日期时使用了... as.POSIXct 从你 ws07ws08 数据集,或(2)数据集的格式。ws07$datews08$date 被错误地导入converted。 解决办法是使用 format= 在你使用的日期转换导入函数中的参数,以确保格式是正确的,年月日也相应地被导入。


0
投票

对我来说,工作的代码。当我绑定其他数据集的数据时,我没有使用c()函数,而是使用data.frame()将其他年份添加到wsAvg数据框架中。

wsAvg<-data.frame(date=as.POSIXct(ws07$date[1224:1559]),u.1=(ws07$u[1224:1559]),stringsAsFactors = FALSE)
wsAvg<-rbind(wsAvg,data.frame(date=as.POSIXct(ws08$date[1032:1367]),u.1=(ws08$u[1032:1367])))          
© www.soinside.com 2019 - 2024. All rights reserved.