16

我有一个“月度数据”,我想绘制数据,以便获得%Y-%m" (2001-01)x 轴格式的日期。说我的数据是pcp <- rnorm(24).

我努力了:

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

但该情节在 x 轴上只有年份。

如何在 x 轴上获得所需日期格式的绘图?

4

3 回答 3

16

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

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"))

输出

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))

在此处输入图像描述

于 2013-07-20T03:25:43.017 回答
12

我发现优秀的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。例如,以 2001 年 1 月的格式"%b-%y"生成日期。Jan-01

示例图

于 2013-07-20T03:29:56.033 回答
3

最好的方法是使用axis.POSIXct {graphics} Here the example from the help of this function:

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")
})

在您的情况下,将格式更改为format="%Y-%m"

问候,

于 2015-09-30T23:54:00.500 回答