2013-07-20 300 views
11

我有一个“每月数据”我想绘制数据,以便我在x轴上获得格式为%Y-%m" (2001-01)的日期。假设我的数据是pcp <- rnorm(24)x轴在“年” - “月”中的时间系列图R

我曾尝试:

PCP <- ts(pcp, frequency = 12, start = 2001) 
plot(PCP) 

但情节只有在x轴上年。

如何在x轴上获得我期望的日期格式图?

+0

我收回了我的投票结束,但请放在一些工作,使问题[reproducible](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。什么是'pcp'? –

+0

这个问题没有回答我的上一个问题,这是完全不同的问题在这里我问的情节,如何做到这一点,这样的X轴包括几个月不仅年 – mms

+0

@ MarwahSoliman一个很好的问题会是重复性。你应该在你的代码上面有'pcp < - norm(24)',这样人们可以执行'PCP'和'plot(PCP)'。这将避免downvotes。最后,你应该选择一个答案,并选择打勾接受它 - 你自己得到这个状态,并且随着你的状态建立,人们会更加关心你的问题。 – ricardo

回答

10

我发现优秀xts包是存储数据的最佳方式进行数据。如果你还没有收到,你可以用install.packages('xts')下载。

让我们从基础开始 - 包括制作pcp,因为您还没有提供它。

require(xts) 
pcp <- rnorm(24) 
PCP <- ts(pcp, frequency = 12, start = 2001) 
plot(as.xts(PCP), major.format = "%Y-%m") 

这给你一个类似下面的图表。您可以通过更改传递到major.format的字符串来调整日期。例如,"%b-%y"产生的Jan-01格式日期2001年一月

example plot

+0

另请注意,R-Forge上的[xtsExtra包](http://r-forge.r- project.org/R/?group_id=118)对xts对象有一些改进的绘图。 –

11

这是玩具数据的一个想法,因为问题是不可重现的。希望这有助于

R> foo = ts(rnorm(36), frequency = 12, start = 2001) 
R> plot(foo, xaxt = "n") 
R> tsp = attributes(foo)$tsp 
R> dates = seq(as.Date("2001-01-01"), by = "month", along = foo) 
R> axis(1, at = seq(tsp[1], tsp[2], along = foo), labels = format(dates, "%Y-%m")) 

Output

ggplot版本,看起来像你

R> df = data.frame(date = seq(as.POSIXct("2001-01-01"), by = "month", length.out = 36), pcp = rnorm(36)) 
R> library(ggplot2) 
R> library(scales) 
R> p = ggplot(data = df, aes(x = date, y = pcp)) + geom_line() 
R> p + scale_x_datetime(labels = date_format("%Y-%m"), breaks = date_breaks("months")) + theme(axis.text.x = element_text(angle = 45)) 

enter image description here

2

最好的办法是使用axis.POSIXct {graphics} 下面的例子中,从这个功能的帮助:

with(beaver1, { 
time <- strptime(paste(1990, day, time %/% 100, time %% 100), 
       "%Y %j %H %M") 
plot(time, temp, type = "l") # axis at 4-hour intervals. 
# now label every hour on the time axis 
plot(time, temp, type = "l", xaxt = "n") 
r <- as.POSIXct(round(range(time), "hours")) 
axis.POSIXct(1, at = seq(r[1], r[2], by = "hour"), format = "%H") 
}) 

您case change the format to format="%Y-%m"

Regards,