2012-01-11 35 views
8

Tôi đang cố gắng vẽ 6 ngày dữ liệu trong ngày dưới dạng 6 biểu đồ. Hàm chart_Series() thử nghiệm của Quantmod làm việc với các thiết lập par(). Tôi đã được nạp sẵn các dữ liệu vào bars (một vector của các đối tượng XTS) để mã của tôi trông như thế này:R/quantmod: nhiều biểu đồ tất cả sử dụng cùng trục y

par(mfrow=c(3,2)) #3 rows, 2 columns 

for(d in bars){ 
    print(chart_Series(d, type = "candlesticks")) 
    } 

này hoạt động, nhưng mỗi biểu đồ có quy mô trục y khác nhau của riêng mình. Tôi muốn thiết lập một phạm vi y bao gồm tất cả 6 ngày, nhưng không thể tìm thấy một cách để làm điều này. Tôi đã thử điều này:

ylim=c(18000,20000) 
print(chart_Series(d, type = "candlesticks",ylim=ylim)) 

nhưng không thành công với lỗi "đối số không được sử dụng". yrange = ylim cũng không thành công.

Tôi có thể sử dụng chartSeries (d, yrange = ylim) và nó hoạt động. Nhưng theo như tôi biết tôi không thể đặt nhiều biểu đồ trong một màn hình (?). (Nó hoàn toàn có thể là chủ đề, nhưng gợi ý cho các gói R thay thế có thể vẽ các biểu đồ nến đẹp mắt, cho phép điều khiển trục y và có thể vẽ nhiều biểu đồ trên một hình ảnh cũng sẽ rất được hoan nghênh.)

Trả lời

8

Với chartSeries, bạn có thể đặt đối số layout thành NULL để ngăn lệnh layout() được gọi: đây là điều vô hiệu hóa cài đặt mfrow.

library(quantmod) 
getSymbols("AA") 

op <- par(mfrow=c(3,2)) 
for(i in 1:6) { 
    chartSeries(
    AA["2011-01"], "candlesticks", 
    TA=NULL, # No volume plot 
    layout=NULL, 
    yrange=c(15,18) 
) 
} 
par(op) 

Nếu bạn muốn giữ khối lượng, bạn có thể gọi layout thay vì thiết mfrow: nó về cơ bản là giống nhau, nhưng cho phép bạn có âm mưu của các kích cỡ khác nhau và chọn thứ tự mà chúng được vẽ.

layout(matrix(c(
    1, 3, 
    2, 4, 
    5, 7, 
    6, 8, 
    9, 11, 
    10, 12 
), nc=2, byrow=TRUE), 
    heights = rep(c(2,1), 3) 
) 
#layout.show(12) # To check that the order is as desired 
for(i in 1:6) { 
    chartSeries( 
    AA[sprintf("2011-%02d",i)], 
    "candlesticks", layout=NULL, yrange=c(15,19) 
) 
} 
+0

Cảm ơn Vincent, mà làm việc! Bất kỳ đề xuất/liên kết/bài viết về cách sử dụng bố cục để đưa trở lại biểu đồ phụ khối lượng? –

+1

Tôi đã thêm một ví dụ với 'layout' (trước khi nhìn thấy câu trả lời của bạn ...) –

1

Googling để hiểu câu trả lời của Vincent đã dẫn tôi đến lệnh layout(). Có vẻ như không tương thích với mệnh đề (mfrow), nhưng một số thử nghiệm khác cho thấy nó có thể được sử dụng như là một thay thế.

ylim=c(18000,20000) 
layout(matrix(1:12,nrow=6,ncol=2), height=c(4,2,4,2,4,2)) 
for(d in bars){ 
    chartSeries(d,layout=NULL,TA=c(addVo(),addBBands()),yrange=ylim) 
    } 

(Bạn sẽ nhận thấy tôi đã thêm Bollinger Bands cũng vậy, chắc chắn lớp phủ vẫn làm việc quá.)

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