2013-06-05 3 views
3

궁극적 인 목표는 월간 S & P 500, Sotheby 's 및 Industrial Production을 경기 침체 막대를 포함하여 하나의 표준화 된 ggplot2로 계획하는 것입니다. 이후yearmon에서 yyyy-mm-dd로 날짜 형식을 변경하는 방법은 무엇입니까?

#======= LOAD PACKAGES ==================================== 
library(tseries) 
library(quantmod) 
library(Quandl) 
library(ggplot2) 
library(forecast) 
library(urca) 

#======= DATA IMPORT ====================================== 
env1 = new.env() 
getSymbols("^GSPC", env = env1, src ="yahoo", from = as.Date("1988-06-01"),to = as.Date("2013-04-01")) 
GSPC = env1$GSPC 
gspc.df = data.frame(date=time(GSPC), coredata(GSPC)) 

env2 = new.env() 
getSymbols("BID", env = env2, src ="yahoo", from = as.Date("1988-06-01"),to = as.Date("2013-04-01")) 
BID = env2$BID 
sothebys.df = data.frame(date=time(BID), coredata(BID)) 

INDPRO <- Quandl("FRED/INDPRO", start_date="1988-06-01",end_date="2013-05-29",type="xts") 
indpro.df = data.frame(date=time(INDPRO), coredata(INDPRO)) 

, 나는 월별 데이터에 매일 데이터를 변환 :

내가 quantmod 및 Quandl를 통해 내 데이터를 수집 그런

# Transform data to monthly time series 
GSPCM <- to.monthly(GSPC) 
gspcm.df = data.frame(date=time(GSPCM), coredata(GSPCM)) 

BIDM <- to.monthly(BID) 
sothebysm.df = data.frame(date=time(BIDM), coredata(BIDM)) 

INDPROM <- to.monthly(INDPRO) 
indprom.df = data.frame(date=time(INDPROM), coredata(INDPROM)) 

, 나는 음모의 data.frame을 구성하고 :

# Build the dataframe with monthly dates and stock prices to be used in graphing 
dfm = data.frame(Date = gspcm.df$date, GSPCM = gspcm.df$GSPC.Adjusted, BIDM = sothebysm.df$BID.Adjusted, INDPROM = indprom.df$INDPRO.Close) 

마지막으로, 설명한 바와 같이 불황 막대가있는 ggplot2를 빌드하려고합니다 (See Link) :

여기
recessions.df = read.table(textConnection(
    "Peak, Trough 
    1857-06-01, 1858-12-01 
    1860-10-01, 1861-06-01 
    1865-04-01, 1867-12-01 
    1869-06-01, 1870-12-01 
    1873-10-01, 1879-03-01 
    1882-03-01, 1885-05-01 
    1887-03-01, 1888-04-01 
    1890-07-01, 1891-05-01 
    1893-01-01, 1894-06-01 
    1895-12-01, 1897-06-01 
    1899-06-01, 1900-12-01 
    1902-09-01, 1904-08-01 
    1907-05-01, 1908-06-01 
    1910-01-01, 1912-01-01 
    1913-01-01, 1914-12-01 
    1918-08-01, 1919-03-01 
    1920-01-01, 1921-07-01 
    1923-05-01, 1924-07-01 
    1926-10-01, 1927-11-01 
    1929-08-01, 1933-03-01 
    1937-05-01, 1938-06-01 
    1945-02-01, 1945-10-01 
    1948-11-01, 1949-10-01 
    1953-07-01, 1954-05-01 
    1957-08-01, 1958-04-01 
    1960-04-01, 1961-02-01 
    1969-12-01, 1970-11-01 
    1973-11-01, 1975-03-01 
    1980-01-01, 1980-07-01 
    1981-07-01, 1982-11-01 
    1990-07-01, 1991-03-01 
    2001-03-01, 2001-11-01 
    2007-12-01, 2009-06-01"), sep=',', 
colClasses=c('Date', 'Date'), header=TRUE) 
recessions.trim = subset(recessions.df, Peak >= min(gspc.df$date)) 
g.gspc = ggplot(data = dfm) + geom_line(aes(x = Date, y = GSPCM, colour = "blue")) + geom_line(aes(x = Date, y = BIDM, colour = "red")) + geom_line(aes(x = Date, y = INDPROM, colour = "green")) + theme_bw() 
g.gspc = g.gspc + geom_rect(data=recessions.trim, aes(xmin=Peak, xmax=Trough, ymin=-Inf, ymax=+Inf), fill='pink', alpha=0.4) 
plot(g.gspc) 

다음과 같은 오류 메시지가 반환됩니다

Don't know how to automatically pick scale for object of type yearmon. Defaulting to continuous. Fehler: Discrete value supplied to continuous scale 

나는 내 dataframe의 날짜 형식과 recessions.df에서 날짜 형식 함께 할 수있는 뭔가가 가정합니다. 다시 한번 귀하의 도움을 높이 평가하겠습니다. 코드가 너무 길지 않기를 바랍니다.

P. Quantmod에서 ChartSeries Tool로 불황 막대를 포함한 동일한 차트를 생성하는 방법이 있다면 그것은 최고 일 것입니다 ...

답변

4

작도하기 전에 yearmon에서 Date으로 날짜를 변환하면 현재 설정이 작동합니다.

dfm = data.frame(Date = as.Date(gspcm.df$date), GSPCM = gspcm.df$GSPC.Adjusted, 
    BIDM = sothebysm.df$BID.Adjusted, INDPROM = indprom.df$INDPRO.Close) 
+0

아, 완벽합니다. 간단하지만 효율적인 :) 대단히 감사합니다, @ Joshua Ulrich! – Chris

6

직접 동물원의 개발 버전에서 yearmon 축을 처리하는 기능이있다 (갱신 : 지금 동물원 1.7-10의 일환으로 출시) :

library(zoo) # 1.7-10 or higher required 
library(ggplot2) 
library(scales) 

z <- zoo(1:12, Sys.yearmon() + 1:12/12) 
autoplot(z) + scale_x_yearmon() 

scale_x_yearmon이 소요 형식 인수를 가지고 평소 백분율 코드.

업데이트 : scale_x_yearmon이 출시되었습니다.

+0

감사합니다. 'scale_x_yearmon' 저를 구했어! –