2014-04-12 7 views
5

chartSeries를 사용하고 Y 축이 잘 렸습니다. 나는 오른쪽에있는 가격을 소수점 이하 2 자리까지 늘리고 싶다. 마진이나 글자 크기의 문제 인 것 같지만, 주위를 검색 한 후에는이 옵션을 조정할 수있는 곳을 찾을 수 없습니다. 나는 도표의 왼편에 충분한 공간이있는 것 같아서 여백을 말한다.Y 축은 Chart 시리즈를 사용하여 잘립니다.

아이디어가 있으십니까? 감사. 나는 소스 코드를 수정하지 않고 당신이 원하는 것을 할 수있는 방법이라고 생각하지 않습니다

require (zoo) 
require(quantmod) 

data <- structure(list(Date = structure(list(sec = c(0, 0, 0, 0, 0, 0 
), min = 0:5, hour = c(15L, 15L, 15L, 15L, 15L, 15L), mday = c(3L, 
3L, 3L, 3L, 3L, 3L), mon = c(0L, 0L, 0L, 0L, 0L, 0L), year = c(114L, 
114L, 114L, 114L, 114L, 114L), wday = c(5L, 5L, 5L, 5L, 5L, 5L 
), yday = c(2L, 2L, 2L, 2L, 2L, 2L), isdst = c(0L, 0L, 0L, 0L, 
0L, 0L)), .Names = c("sec", "min", "hour", "mday", "mon", "year", 
"wday", "yday", "isdst"), class = c("POSIXlt", "POSIXt")), Open = c(544.95, 
544.8, 544.84, 544.8, 544.75, 544.78), High = c(545.1, 544.89, 
544.9, 544.8, 544.8, 545.03), Low = c(544.8, 544.77, 544.79, 
544.6, 544.66, 544.76), Close = c(544.86, 544.79, 544.8, 544.69, 
544.75, 545.01)), .Names = c("Date", "Open", "High", "Low", "Close" 
), row.names = 330:335, class = "data.frame") 

data$Date <- as.POSIXct(strptime(data$Date, format = "%Y-%m-%d %H:%M:%S")) 
data <- read.zoo(data, FUN=as.POSIXct) 
chartSeries(data, type = "bars", theme = chartTheme("white")) 
+0

당신이 마음에 들지 않으면 소스 코드를 편집하면서 제안한 솔루션 인'chart_Series'를 사용하여'chart_pars()'를 편집하여 원하는 효과를 얻을 수있었습니다. – FXQuantTrader

답변

3

:

Plot using ChartSeries

다음은 위의 차트 재현 코드입니다. 이것은 당신이 원하는 것을 얻기위한 한 방법입니다 :

quantmod 네임 스페이스 내에서 chartSeries 코드를 수정하십시오. 수정해야 할 코드 영역은 함수 편집 라인 7-8, 19 내부 ​​chartSeries.chob

fixInNamespace(x = "chartSeries.chob", pos = as.environment("package:quantmod")) 

라는 함수이며, 117

특히 라인 :

- 라인 (7) -8 : 목록에서 각 벡터의 네 번째 요소를 수정합니다. 오른쪽 여백에 대한 여백 너비를 제어합니다 (첫 번째 요소는 아래 여백 폭을 변경하고 두 번째 요소는 왼쪽, 세 번째 요소는 위쪽 여백을 변경 함). 당신과 같이, 3 대신 4를 사용할 수 있습니다

par.list <- list(list(mar = c(0, 3.5, 2, 4)), list(mar = c(0, 
     3.5, 0, 4)), list(mar = c(3.5, 3.5, 0, 4))) 

- 라인 19 : 4 요소를 변경 네 말을, 왼쪽 여백에 끌어 예 : 코드

else par(mar = c(3.5, 3.5, 2, 4)) 

아래 줄에 표시된 다른 TA (예 : 볼륨, RSI 등) 없이도 가격 계획을 수행 할 때 필요합니다.

- 이제 117 줄은 axis(4)입니다. 이 말을

변경 :

axis(side = 4, at = axTicks(2), labels = sprintf("%.2f", axTicks(2))) 

댓글 : - 인수 측이 될 수 1, 축 틱 라벨이 어디로 편집 2, 3, 4. side = 2를 시도하면 오른쪽 대신 왼쪽 여백에 번호가 표시됩니다 (왼쪽에 TA 눈금 레이블이 나열되어 있음).

  • at 인수를 사용하면 눈금 레이블의 위치를 ​​지정할 수 있습니다. axTicks(2)은 주어진 데이터 세트에 대해 R로 설정된 기본 간격입니다.이 값을 변경하려면 플롯의 y 범위에있는 숫자 세트를 수행하십시오 (예 : at = c(544.345, 545.05)을 시도해 볼 수 있음). 플롯 인쇄시 두 개의 진드기 레이블 만 표시).

  • 인수는 at 인수로 지정된 위치에서 인쇄하고자하는 것을 선택하게 해주는 문자 벡터 (at 벡터와 길이가 동일)입니다. 유용한 라벨을 알려 드렸습니다 : labels = sprintf("%.2f", axTicks(2)).이것은 눈금 라벨을 소수 둘째 자리에 부여합니다 (EURUSD 등 주요 통화 쌍에 대해 소수점 이하 4 자리로 변경할 수 있음).

변경 사항을 저장하십시오. quantmod:::chartSeries.chob을 입력하면 현재 R 세션에 대한 변경 사항이 영구적으로 적용되었는지 확인할 수 있습니다 (코드 수정 사항이 표시되어야합니다. 그렇지 않은 경우 잘못된 것이 있습니다).

chartSeries(data, type = "bars", theme = chartTheme("white")) 

y axis adjusted

편집 :

에서 :

how to get assignInNamespace to work

당신이 원하는 경우

지금, 평소 방법에 chartSeries 기능을 다시 실행 변화를 자동화하다 편집 창을 사용하지 않고 chartSeries.chob 함수를 사용하면 다음을 수행 할 수 있습니다.

수정 된 버전에서 원하는대로 변경하는 chartSeries.chob 함수를 편집하십시오. 즉

chartSeries.chob2 <- function (x) 
{ 
    old.par <- par(c("pty", "mar", "xpd", "bg", "xaxs", "las", 
        "col.axis", "fg")) 
    on.exit(par(old.par)) 
    LAYOUT <- ifelse(is.null([email protected]), FALSE, TRUE) 
....[add whatever changes] 
} 

그런 다음이 줄을 실행합니다

environment(chartSeries.chob2) <- environment(get("chartSeries.chob", envir = asNamespace("quantmod"))) 
assignInNamespace(x = "chartSeries.chob", value = chartSeries.chob2, ns = "quantmod") 

귀하의 chartSeries 플롯은 (현재 R 세션에서) 지금 수정을 실행해야합니다.

편집 2 :

quantmod 소스 코드를 편집하지 않고, 당신이 원하는 것을 달성하는 또 다른 방법은,이 답변의 아이디어를 chart_Series(.)을 사용하고 다음에 의해 달성 될 수있다 R quantmod chart_Series: using large fonts for y axis

관련 문제