我有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使用了以下代码:
ticks<- seq(as.Date("2007-01-01"),as.Date("2009-12-31"),"months")
它不起作用,因为刻度应该是数字而不是字符。我看到here可以使用我使用的第一个代码,但它不适用于我的情况。我非常感谢任何人能在这方面给我一些提示。谢谢
发布于 2014-10-11 03:45:36
我只能假设您的x
是一个时间序列,例如zoo
或xts
对象。如果是这样的话,你可以使用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)))
发布于 2014-10-11 01:04:36
以下内容可能会有所帮助:
> 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"
https://stackoverflow.com/questions/26304399
复制相似问题