2014-05-21 2 views
1

EWMA_SD252 3561 obs라는 데이터 프레임이 있습니다. (102 개) 변수 (2000 년 이후 100 개 주식의 일일 변동성)로, 여기에 샘플입니다함수를 사용하여 그래프를 그려야합니다

 Data  IBOV  ABEV3 AEDU3 ALLL3 
3000 2012-02-09 16.88756 15.00696 33.46089 25.04788 
3001 2012-02-10 18.72925 14.55346 32.72209 24.93913 
3002 2012-02-13 20.87183 15.25370 31.91537 24.28962 
3003 2012-02-14 20.60184 14.86653 31.04094 28.18687 
3004 2012-02-15 20.07140 14.56653 37.45965 33.47379 
3005 2012-02-16 19.99611 16.80995 37.36497 32.46208 
3006 2012-02-17 19.39035 17.31730 38.85145 31.50452 

내가 뭘 또한 날짜 참조를 사용하여 특정 주식에서 간격을 부분 집합하고, 단일 명령을 사용하는 것을 시도하고있다 같은 간격으로 차트를 그렸습니다. 지금까지 부분 집합 부분을 처리 할 수 ​​있었지만 이제는 차트를 그려야합니다. 여기까지 코드 :

날짜 간격 및 주식 이름 얻기 :

datas = function(x,y,z){ 
    intervalo_datas(as.Date(x,"%d/%m/%Y"),as.Date(y,"%d/%m/%Y"),z) 
    } 

데이터 서브 세트 :

intervalo_datas <- function(x,y,z){ 
cbind(as.data.frame(EWMA_SD252[,1]),as.data.frame(EWMA_SD252[,z]))[EWMA_SD252$Data >= x & EWMA_SD252$Data <= y,] 
} 

지금 막 막혔습니다. ABEV3 data.frame을 가져 오는 함수를 사용하고 벨로우즈 명령을 사용하여 X의 날짜와 변동성을 사용하여 차트를 그릴 수 있습니까?

ABEV3 = datas ("2012년 9월 2일", "17/02/2012", "ABEV3")

답변

1

당신은 자동으로 주식의 임의의 양 나타내는 기능 할 ggplot2 및 reshape2을 사용할 수

plot_stocks <- function(data, date1, date2, stocks){ 
    require(ggplot2) 
    require(reshape2) 
    date1 <- as.Date(date1, "%d/%m/%Y") 
    date2 <- as.Date(date2, "%d/%m/%Y") 
    data <- data[data$Data > date1 & data$Data < date2,c("Data", stocks)] 
    data <- melt(data, id="Data") 
    names(data) <- c("Data", "Stock", "Value") 
    ggplot(data, aes(Data, Value, color=Stock)) + geom_line() 
} 

"ABEV3"재고 표시 :

plot_stocks(EWMA_SD252, "09/02/2012", "17/02/2012", "ABEV3") 

enter image description here

플로팅 세 주식 :

plot_stocks(EWMA_SD252, "09/02/2012", "17/02/2012", c("IBOV", "ABEV3", "AEDU3")) 

enter image description here

당신은 더 등 geom_smooth

같은 다른 기하 구조를 추가하여 기능을 맞춤화 할 수 있습니다
1

(내가 있으리라 믿고있어 당신의 EWMA_SD252 data.frame의 Data 열이 이미 Date 클래스입니다. 아직 변환하지 않은 경우 변환하십시오.)

주어진 날짜 간격 동안 data.frame의 특정 열을 플로팅하려는 것 같습니다. x, yz보다 자세한 설명이 포함 된 변수 이름을 사용하는 경우 다른 사람들이 코드를 읽는 것이 훨씬 쉬울 것입니다. date0, date1, column.

함수를 다시 작성해 보겠습니다. EWMA_SD252이 이미 data.frame 인 경우 cbind 개의 개별 열을 data.frame에 넣지 않아도됩니다. 데이터 인수를 주면 상황이보다 유연 해집니다. 모든 datas 함수는 Dates으로 변환되고 intervalo_datas으로 전화를 걸기 때문에이를 다시 포장해야합니다.

intervalo_datas <- function(date0, date1, column_name, data = EWMA_SD252) { 
    if (!is.Date(date0)) date0 <- as.Date(date0, "%d/%m/%Y") 
    if (!is.Date(date1)) date1 <- as.Date(date1,"%d/%m/%Y") 
    cols <- c(1, which(names(data) == column_name)) 
    return(EWMA_SD252[EWMA_SD252$Data >= x & EWMA_SD252$Data <= y, cols]) 
} 

이제 하위 집합이 방법

ABEV3 = intervalo_datas("09/02/2012", "17/02/2012", "ABEV3") 

을 얻을 그리고 다음과 같이 그릴 수 있어야합니다. 당신이 부분 집합 기능도 플롯, 바로 리턴 라인 전에 플롯 명령을 추가하려면

plot(ABEV3[, 1], ABEV3[, 2]) 

(그러나 먼저 부분 집합을 정의!). agstudy 권장 사항으로 xts과 같은 것을 사용하면 사물을 단순화하고 축 라벨에서 더 잘 처리 할 수 ​​있습니다.

3

xts 패키지를 사용해야한다고 생각합니다.그것은 적합 : 그래서 당신의 데이터를 사용하여 객체 XTS를 만들 것 시계열

음모를 꾸미고

  • manipluating 시계열 특별히 금융 시계열
  • 부분 집합 시간 시리즈
  • . 그런 다음 당신이하려고 한 것과 같은 단일 기능으로 서브셋/플롯을 래핑합니다.

    library(xts) 
    dat_ts <- xts(dat[,-1],as.Date(dat$Data)) 
    plot_data <- 
        function(start,end,stock) 
        plot(dat_ts[paste(start,end,sep='/'),stock]) 
    

    이처럼 호출 할 수

    plot_data('2012-02-09','2012-02-14','IBOV') 
    

    enter image description here

관련 문제