построение графика SPX и VIX с использованием quantmod в R

Я только что познакомился с quantmod и посмотрел примеры здесь http://www.r-chart.com/2010/06/stock-analysis-using-r.html Я попробовал следующий код:

getSymbols(c("^GSPC","^VIX"))
head(as.xts(merge(GSPC,VIX)))
chartSeries(c(GSPC, VIX), subset='last 3 months')

но график был совершенно не в масштабе, поэтому я надеюсь, что некоторые из экспертов на этом форуме могут показать мне, как это правильно построить.


person user1155299    schedule 23.01.2012    source источник
comment
Если вам нужны графики свечей и объемов, было бы более читабельно использовать отдельные графики, как в предыдущем вопросе: stackoverflow.com/questions/8815697/. Если вы хотите сравнить движение цены, вы можете разделить скорректированный временной ряд цен на их первое значение, чтобы они начинались с одной и той же точки.   -  person Vincent Zoonekynd    schedule 23.01.2012
comment
Я только хочу сравнить движения цен. Я искал способ построить необработанный временной ряд на двух отдельных осях. Учитывая, сколько функций имеет этот пакет, я предполагаю, что должно быть что-то для обработки двух разных осей.   -  person user1155299    schedule 23.01.2012
comment
Чтобы иметь две разные оси Y, вы можете проверить: r" title="как я могу построить график с двумя разными осями Y в r"> stackoverflow.com/questions/6142944/   -  person Vincent Zoonekynd    schedule 23.01.2012


Ответы (2)


Вот пример, который не использует chartSeries.

ind <- function(x) {
  # Divide each column by the first non-NA value
  # (There may already be a function to do that.)
  coredata(x) <- t(t(coredata(x)) / apply(coredata(x),2,function(u){ c(u[!is.na(u)&u!=0],NA)[1] }))
  x
}
x <- cbind( Ad(GSPC), Ad(VIX) )
x <- x["2011-11::"]

# Using base graphics
matplot( 
  index(x), coredata(ind(x)), 
  xlab="", ylab="", main="",
  type="l", lty=1, lwd=3, axes=FALSE 
)
abline(h=1, lty=3, col="lightgrey")
axis(2, las=1)
axis.Date(1, index(x))
box()
legend( "topleft", gsub("\\..*", "", names(x)), lty=1, lwd=3, col=1:2 )

# If you prefer ggplot2
library(ggplot2)
library(reshape2)
d <- data.frame( date = index(x), coredata(ind(x)) )
names(d) <- gsub("\\..*", "", names(d))
d <- melt(d, id.vars="date")
ggplot(d, aes(date, value, color=variable)) + geom_line(size=2)
person Vincent Zoonekynd    schedule 23.01.2012

Попробуй это:

chart_Series(GSPC)
add_Series(OHLC(VIX)+1000,on=1)

Вам нужно использовать OHLC, чтобы удалить объем из VIX, так как он всегда равен нулю и, кажется, останавливает автоматический расчет ylim. Я также добавил 1000, чтобы уровни двух серий были немного ближе друг к другу.

person Joshua Ulrich    schedule 23.01.2012