2011-08-11 3 views
5

두 쌍의 주식 (쌍 거래)에 대한 분석을 시작했고 여기에 그래프를 작성하기 위해 작성한 함수 (pairs.report - 아래에 나열)가 있습니다.xts 객체를 사용하여 점, 범례 및 텍스트를 플롯에 추가

한 줄에 세 개의 다른 줄을 그려야합니다. 필자가 나열한 함수는 내가 원하는 것을 수행하지만 x 축 (타임 라인)에서 정밀한 사용자 정의를 원한다면 약간의 작업이 필요합니다. 그대로 틱의 형식을 지정하지 않고 단지 x 년 동안 (데이터의 10 년 동안) 또는 개월 (데이터의 6 개월 동안)을 인쇄합니다.

내가

plot(xts-object-with-date-asset1-asset2, ...) 

대신

plot(date, asset2, ...) 

사용하는 경우 나, 즉 XTS 개체를 사용하는 경우, 나는 그리드와 상자와 함께 (바로 멋지게 형식의 x 축를 얻을 수), points(), text(), lines()과 같은 함수를 사용하여 플롯에 추가하는 것은 실패합니다. 나는 points.xts()와 text.xts()가 곧 나오지 않을 것이라고 생각한다.

xts 객체의 편리함을 원하지만 내 플롯에 대한 세부적인 제어가 필요합니다. 그렇다면 내 작업 흐름은 어떠해야합니까? 기본 그래픽을 고수하고 모든 사용자 정의 작업을 수동으로 수행해야합니까? 아니면 xts가 나를 위해 일할 수있는 방법이 있습니까?

격자와 ggplot2를 알고 있지만 지금은 사용하고 싶지 않습니다. 저는 여기에 언급 된 기능은 (모든 비판은/코드의 개선을위한 제안을 환영합니다) -

library(xts) 

pairs.report <- function(asset1, asset2, dataset) { 

#create data structures 
attach(dataset) 
datasetlm <- lm(formula = asset1 ~ asset2 + 0, data = dataset) 
beta = coef(datasetlm)[1] 

#add extra space to right margin of plot within frame 
par(mar=c(5, 4, 4, 4) + 0.1) 

# Plot first set of data and draw its axis 
ylim <- c(min(asset2,asset1), max(asset2,asset1)) 
plot(date, 
    asset2, 
    axes=T, 
    ylim=ylim, 
    xlab="Timeline", 
    ylab="asset2 and asset1 equity", 
    type="l", 
    col="red", 
    main="Comparison between asset2 and asset1") 
lines(date, asset1, col="green") 
box() 
grid(lwd=3) 

# Allow a second plot on the same graph 
par(new=T) 

# Plot the second plot and 
ylim <- c(min(asset1-beta*asset2), max(asset1-beta*asset2)) 
plot(date, 
    asset1-beta*asset2, 
    xlab="", ylab="", 
    ylim=ylim, 
    axes=F, 
    type="l", 
    col="blue") 

#put axis scale on right 
axis(side=4, 
    ylim=ylim, 
    col="blue", 
    col.axis="blue") 
mtext("Residual Spread",side=4,col="blue",line=2.5) 

abline(h=mean(asset1-beta*asset2)) 
} 
+0

이 스레드의 내 자신의 질문에 대한 대답은 다음과 같을 수도 있습니다. http://stackoverflow.com/questions/7009711/how-to-get-years-from-a-time-series-index-when -the-underlying-time-series-of-m 최소한 10 년 이상 다른 시간대를 가져야합니다. 물론 진드기도 마찬가지입니다. –

+2

'plot.zoo'는 xts 객체와 작동하며 훨씬 더 세밀한 제어를 제공합니다. '? plot.zoo'에는 수많은 예제가 있습니다. –

답변

3

plot.xts 당신 같은 X 인수를 사용하는 경우 points.default()lines.default()를 사용할 수 있다는 것을 의미 기본 플롯 기능입니다 plot.xts가 사용합니다. 하지만 그럴 필요는 없습니다. 패키지가로드되고 methods(lines)을 실행하고 그러한 기능이 이미 사용 가능하다는 것을 알 수 있기 때문에 xts 및 zoo 패키지에서 이미 해싱되었습니다. points.zoo은? plot.zoo 페이지에 설명되어 있습니다.

+0

lines.default는 실행되는 동안 음모에 아무 것도하지 않았습니다. 먼저 plot (petroxts)을 사용하여 xts 객체의 첫 timeseries를 그리고 par (new = T)를 실행 한 후 lines.default (petro $ date, petroxts $ hpcl, col = "green")를 실행하면 프롬프트는 다음과 같습니다. 어떤 메시지도없이 돌아 왔고 플롯에는 아무런 변화가 없었습니다. 그래서 어떻게 lines.default를 사용합니까? – Soumendra

+0

요인 및 시간 날짜가 사용자에게 분명하지 않을 수있는 방식으로 표현된다는 사실이 아마 발생했을 것입니다. 음모 함수가 암시 적 as.numeric()을 수행하고 점들이 음모 영역 밖에 있기 때문에 음영이 나타나지 않는 경우가 종종 있습니다. 귀하의 질문에 "데이터 집합"개체에 관한 세부 사항이 부족하면 더 구체적인 대답은 불가능합니다. 동물원/xts 개체 인 경우 "날짜"는 개체의 색인 구성 요소에있을 수 있습니다. –

관련 문제