我有4年的历史日常数据。我用命令plot()
绘制了时间序列,并放置xaxt="n"
来自定义x轴。如果我想在每天的情节和标签中添加每日标记,我的情节会变得太乱,所以我只想显示月份的标记。例如,如果我有3年的数据,我只想在x轴上放置36个刻度,每个刻度显示相应的年份和月份。我花了一天的时间阅读了很多关于如何自定义x轴的问题,但没有一种方法适用于我的情况。我真的不知道我还能做什么。这是我使用的代码:
plot(x,xaxt="n")
ticks <- seq.Date(as.Date("2007-01-01"),as.Date("2009-12-31"),"months")
labels <- seq(as.Date("2007-01-01"),as.Date("2009-12-31"),"months")
axis(1,ticks,labels,format="%b%Y")
我首先使用以下代码进行刻度:
ticks<- seq(as.Date("2007-01-01"),as.Date("2009-12-31"),"months")
它不起作用,因为刻度应该是数字而不是字符。我看到here我可以使用我使用的第一个代码,但它对我的情况不起作用。如果有人能给我一些提示,我非常感谢。感谢
答案 0 :(得分:2)
我只能假设您的x
是一个时间序列,例如一个zoo
或xts
对象。如果是这样,您可以使用&#34;特殊&#34;参数plot.xts(...)
。如果没有,则必须加载xts
包,并将x
转换为xts
对象。
# sample data - you have this already??
# historical daily data - SP500
library(quantmod) # for getSymbols
SP500 <- getSymbols("SP500", src="FRED", auto.assign=FALSE)
class(SP500) # an xts pbject
# [1] "xts" "zoo"
x <- SP500["2012::2014"] # ~last 3 years
# you start here ## ASSUMES x is an xts object ##
par(mar=c(3,3,1,1),cex.axis=0.7)
plot(x, major.format="%b-%Y",minor.ticks=FALSE,mgp=c(0,0.5,0))
如果您想要更多控制权,请使用axTicksByTime(...)
# "manual" tick marks
plot(x,xaxt="n")
ticks <- axTicksByTime(x,"months",format.labels="%b-%Y")
axis(1,at = .index(x)[ticks], labels = names(ticks),mgp=c(0,0.5,0))
有点发烧友......
# insert line breaks into axis labels
plot(x,xaxt="n")
ticks <- axTicksByTime(x,"months",format.labels="%b-%Y")
axis(1,at = .index(x)[ticks], labels = sub("-","\n",names(ticks)))
答案 1 :(得分:0)
以下可能会有所帮助:
> newticks = sapply(strsplit(as.character(ticks), split='-'), function(x) paste(x[1],x[2], sep='_') )
> newticks
[1] "2007_01" "2007_02" "2007_03" "2007_04" "2007_05" "2007_06" "2007_07" "2007_08" "2007_09" "2007_10" "2007_11" "2007_12"
[13] "2008_01" "2008_02" "2008_03" "2008_04" "2008_05" "2008_06" "2008_07" "2008_08" "2008_09" "2008_10" "2008_11" "2008_12"
[25] "2009_01" "2009_02" "2009_03" "2009_04" "2009_05" "2009_06" "2009_07" "2009_08" "2009_09" "2009_10" "2009_11" "2009_12"