2012-01-29 57 views
11

我有CSV格式的文件:用x时间轴绘制R图:如何强制刻度标签成为日期?

timestamp,pages 
2011-12-09T11:20:50.33,4 
2012-01-23T17:44:02.71,132 
2012-01-28T15:07:59.34,168 

第一列是一个时间戳,第二个是页数。 我需要绘制纵轴上的页数和横轴上的时间戳。

时间戳并不经常间隔,我有一天在十二月蚂蚁在一月的两个关闭日期。

我想这个代码

df = read.csv("my_data.csv") 
df$timestamp = strptime(df$timestamp, "%Y-%m-%dT%H:%M:%S") 
plot(df$timestamp,df$pages) 

,我在x轴的中间有一个情节只有一个刻度,并与标签“扬”:这是没有错的,但我想有三个蜱只有日数和月份。

我试图

plot(df$timestamp,df$pages,xaxt="n") 
axis.Date(1,df$timestamp,"days") 

但没有x轴绘制。 有什么想法? 谢谢

回答

12

我会as.Date()timestamp这样的:

df$timestamp = as.Date(strptime(df$timestamp, "%Y-%m-%dT%H:%M:%S")) 

这工作那么:

plot(df$timestamp,df$pages,xaxt="n") 
axis.Date(1,at=df$timestamp,labels=format(df$timestamp,"%b-%d"),las=2) 

enter image description here

10

这将工作:

plot(df$timestamp,df$pages,xaxt="n") 
axis.POSIXct(1, at=df$timestamp, labels=format(df$timestamp, "%m/%d")) 

基本上在axis.POSIXct(请注意,您的数据框中有POSIXct日期)指定轴的刻度(at)以及标签的位置。

通常我喜欢我的日期标签垂直而不是水平。在绘图之前使用par(las=2)

5

我发现这一点:http://personality-project.org/r/r.plottingdates.html

这给了我,我的解决方案...

dm = read.csv("my_data.csv", sep=",", head=TRUE) 
dm$DateTime <- as.POSIXct(dm$timestamp, format="%Y-%m-%dT%H:%M:%S") 
daterange=c(as.POSIXlt(min(dm$DateTime)), as.POSIXlt(max(dm$DateTime))) 
plot(pages ~ DateTime, dm, xaxt = "n") 
axis.POSIXct(1, at=seq(daterange[1], daterange[2], by="day"), format="%b %d") 

的重要部分是daterangeat=seq(..., by="day")

+0

谢谢,为了得到正确的结果,我不得不改变你的代码片段:'dm = read.csv(“my_data.csv”,sep =“,”,head = TRUE) dm $ DateTime < as.POSIXct(dm $ timestamp,format =“%Y-%m-%dT%H:%M:%S”) daterange = c(as.POSIXlt(min(dm $ DateTime)),as.POSIXlt max(dm $ DateTime))) plot(pages_DateTime,dm,xaxt =“n”) axis.POSIXct(1,at = seq(daterange [1],daterange [2],by =“day”) ,格式=“%b%d”)' – 2014-10-16 06:37:33

+1

@uvts_cvs啊,是的,我的日期/时间是分开的列。将更新。 – jozxyqk 2014-10-16 08:05:38

相关问题