2014-04-12 19 views
5

Tôi đang sử dụng biểu đồSeries và trục Y bị cắt. Tôi muốn giá ở bên phải để mở rộng đến 2 chữ số thập phân. Nó có vẻ là một vấn đề của lề hoặc kích thước phông chữ, nhưng sau khi thực hiện một số tìm kiếm xung quanh, tôi không thể tìm thấy bất cứ nơi nào để điều chỉnh các tùy chọn này. Tôi nói lề vì dường như có rất nhiều không gian ở phía bên tay trái của biểu đồ.Trục Y bị cắt bằng Bảng xếp hạng trong R

Bất kỳ ý tưởng nào? Cảm ơn.

Plot using ChartSeries

Đây là mã tái sản xuất cho các biểu đồ trên:

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

Nếu bạn không thích giải pháp tôi đề xuất với việc chỉnh sửa mã nguồn, bạn chỉ có thể sử dụng 'chart_Series', chỉnh sửa' chart_pars() 'để có được hiệu ứng bạn muốn. – FXQuantTrader

Trả lời

3

Tôi không nghĩ rằng có một cách để làm những gì bạn muốn mà không sửa đổi mã nguồn. Đây là một cách để đạt được những gì bạn muốn:

Sửa đổi biểu đồ Mã lệnh từ bên trong không gian tên quantmod. Diện tích mã bạn cần phải sửa đổi là trong một chức năng gọi là chartSeries.chob

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

Bên trong dòng chức năng chỉnh sửa 7-8, 19 tuổi, và dòng 117.

Cụ thể:

- dòng 7 -8: Sửa đổi phần tử thứ 4 của mỗi vectơ trong danh sách. Điều này kiểm soát độ rộng lề cho lề phải (phần tử đầu tiên thay đổi chiều rộng lề dưới, phần tử thứ hai bên trái, phần thứ ba lề trên). Bạn có thể sử dụng 4 thay vì 3, như vậy:

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))) 

- dòng 19: thay đổi các yếu tố thứ 4 để nói 4 để kéo ở bên lề trái, ví dụ:

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

Mã trên dòng 19 là cần thiết khi bạn chỉ làm một âm mưu giá mà không có bất kỳ TA nào khác được vẽ bên dưới, (chẳng hạn như âm lượng, RSI, v.v.)

- Bây giờ, dòng 117 nói axis(4).

Thay đổi nó để nói:

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

Bình luận: - phía đối số có thể là 1, 2, 3, 4 mà chỉnh sửa nơi nhãn trục đánh dấu đi. Nếu bạn thử side = 2, nó sẽ đặt các số ở lề trái thay vì bên phải (xếp hàng với bất kỳ nhãn đánh dấu TA nào ở bên trái).

  • Đối số at cho phép bạn chỉ định nơi nhãn đánh dấu của bạn sẽ đi. axTicks(2) là khoảng cách mặc định được đặt bởi R cho tập dữ liệu đã cho - nếu bạn muốn thay đổi các giá trị này, hãy đặt bất kỳ số nào nằm trong phạm vi y của ô của bạn (ví dụ: bạn có thể thử at = c(544.345, 545.05) và bạn sẽ chỉ thấy hai nhãn đánh dấu khi bản vẽ của bạn in ra).

  • Các labels đối số là một vector nhân vật (cùng chiều dài như tại vector) cho phép bạn chọn bất cứ điều gì bạn muốn được in tại các địa điểm theo quy định của bạn tại cuộc tranh cãi. Tôi đã cố gắng cung cấp cho bạn một nhãn hữu ích: labels = sprintf("%.2f", axTicks(2)).Điều này cung cấp cho các nhãn tick đến hai chữ số thập phân (bạn có thể thay đổi điều này để nói 4 chữ số thập phân cho một cặp tiền tệ lớn như EURUSD, vv).

Lưu các thay đổi này. Bạn có thể kiểm tra xem các thay đổi có được thực hiện vĩnh viễn cho phiên R hiện tại hay không bằng cách chỉ cần gõ quantmod:::chartSeries.chob (bạn sẽ thấy các sửa đổi mã của mình - nếu không, có điều gì đó sai).

Bây giờ, chạy lại chức năng chartSeries của bạn theo cách bạn bình thường:

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

y axis adjusted

EDIT:

Từ:

how to get assignInNamespace to work

Nếu bạn muốn tự động thay đổi thành chức năng chartSeries.chob (không sử dụng cửa sổ chỉnh sửa), bạn có thể thực hiện các thao tác sau:

Chức năng thực hiện bất kỳ thay đổi nào bạn muốn, trong một phiên bản sửa đổi. ví dụ:

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] 
} 

Sau đó chạy những dòng này:

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

chartSeries lô của bạn nên chạy với những thay đổi của bạn bây giờ (trong phiên R hiện tại của bạn).

EDIT 2:

Một cách khác để đạt được những gì bạn muốn, mà không cần chỉnh sửa mã nguồn quantmod, có thể đạt được bằng cách sử dụng chart_Series(.) và sau những ý tưởng trong câu trả lời này R quantmod chart_Series: using large fonts for y axis

Các vấn đề liên quan