在ggplot中手动缩放X轴,绘制POSIXct。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ggplot中手动缩放X轴,绘制POSIXct。相关的知识,希望对你有一定的参考价值。
我试图绘制这个风速数据,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"))+
如果不使用 scale_x_datetime()
在我的命令中,我得到了这些日期。当我在命令中加入 scale_x_datetime()
函数来手动缩放我的X轴,使其只显示年份。我所有的数据都排到了2007年。有谁知道这是为什么?
由于我们对你的任何数据都不清楚,所以很难提供你问题的答案。 说到这里,让我们看看您提供的信息,看看您的问题可能的根源在哪里。
这个问题显然与位于你的 "日期 "列中的格式化数据有关。 最好是循序渐进地看,在每一步都进行测试,看看这里会出什么问题。
你的原始数据 很可能没什么问题 错的 与您的基础数据,但我们不知道来自 "日期 "向量的格式。
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
从你 ws07
和 ws08
数据集,或(2)数据集的格式。ws07$date
或 ws08$date
被错误地导入converted。 解决办法是使用 format=
在你使用的日期转换导入函数中的参数,以确保格式是正确的,年月日也相应地被导入。
对我来说,工作的代码。当我绑定其他数据集的数据时,我没有使用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])))
以上是关于在ggplot中手动缩放X轴,绘制POSIXct。的主要内容,如果未能解决你的问题,请参考以下文章
在不删除数据的情况下限制 ggplot2 轴(超出限制):缩放
如何将垂直 geom_vline 获取到课程日期的 x 轴?