2012-02-27 26 views
5

Tôi có chuỗi thời gian nhiều biến là một số biến có phạm vi khá lớn. Tôi muốn tạo một cốt truyện một trang với nhiều ô xếp chồng lên nhau của mỗi biến là một số biến có thang tỷ lệ trục y log10. Tôi tương đối mới với mạng và không thể tìm ra cách kết hợp hiệu quả quy mô log10 với các trục không biến đổi và có được một âm mưu chất lượng xuất bản. Nếu print.trellis được sử dụng thì các ô không được căn chỉnh và phần đệm cần một số công việc, nếu c.trellis được sử dụng thì bố cục là tốt, nhưng chỉ sử dụng thang đo y chỉ từ một ô. Bất kỳ đề xuất cho một giải pháp hiệu quả, nơi tôi có thể nhân rộng đầu ra của c.trellis bằng cách sử dụng y-scaling khác nhau cho mỗi đối tượng (bản gốc)? Ví dụ bên dưới:mạng hoặc mạngExtra kết hợp nhiều ô khác nhau yscaling (log10 và không chuyển đổi)

require(lattice) 
    require(latticeExtra) 

    # make data.frame 
    d.date <- as.POSIXct(c("2009-12-15", "2010-01-15", "2010-02-15", "2010-03-15", "2010-04-15"))     
    CO2dat <- c(100,200,1000,9000,2000) 
    pHdat <- c(10,9,7,6,7) 
    tmp <- data.frame(date=d.date ,CO2dat=CO2dat ,pHdat=pHdat) 

    # make plots 
    plot1 <- xyplot(pHdat ~ date, data=tmp 
    , ylim=c(5,11) 
    , ylab="pHdat" 
    , xlab="Date" 
    , origin = 0, border = 0 
    , scales=list(y=list(alternating=1)) 
    , panel = function(...){ 
    panel.xyarea(...) 
    panel.xyplot(...) 
    } 
    ) 

    # make plot with log y scale 
    plot2 <- xyplot(CO2dat ~ date, data=tmp 
      , ylim=c(10,10^4) 
      , ylab="CO2dat" 
      , xlab="Date" 
      , origin = 0, border = 0 
      , scales=list(y=list(alternating=1,log=10)) 
           , yscale.components = yscale.components.log10ticks 
      , panel = function(...){ 
       panel.xyarea(...) 
       panel.xyplot(...) 
       # plot CO2air uatm 
       panel.abline(h=log10(390),col="blue",type="l",...) 
      } 
      ) 

     # plot individual figures using split 
     print(plot2, split=c(1,1,1,2), more=TRUE) 
     print(plot1, split=c(1,2,1,2), more=F) 

     # combine plots (more convenient) 
     comb <- c(plot1, plot2, x.same=F, y.same=F, layout = c(1, 2)) 

     # plot combined figure 
     update(comb, ylab = c("pHdat","log10 CO2dat")) 
+0

Các bạn đã thử đệm nhãn trục y đánh dấu trong plot1 với lãnh đạo không gian trống (cho môi trường 'phương pháp print.trellis'), hoặc bạn đang tìm kiếm một giải pháp quảng cáo hoc ít hơn? – joran

+0

Hi @joran: hãy xem nỗ lực của tôi về ý tưởng của bạn bên dưới. – Aaron

Trả lời

1

Sử dụng ý tưởng của @ joran, tôi có thể đưa các trục đến gần hơn nhưng không chính xác; Ngoài ra, việc giảm đệm sẽ khiến chúng gần nhau hơn nhưng thay đổi tỷ lệ khung hình. Trong hình dưới đây tôi đã giảm padding có lẽ bởi quá nhiều để hiển thị không chính xác; nếu đóng này là mong muốn, bạn rõ ràng muốn loại bỏ các nhãn trục x trên đầu trang là tốt.

Tôi nhìn vào mã thiết lập bố cục và lề ở bên trái được tính từ chiều rộng của nhãn, vì vậy ý ​​tưởng của @ joran có lẽ là thứ duy nhất hoạt động dựa trên việc in bằng cách sử dụng split, trừ khi một là viết lại lệnh plot.trellis. Có lẽ phương pháp c có thể hoạt động nhưng tôi chưa tìm thấy cách nào để đặt thành phần thang đo riêng biệt tùy thuộc vào bảng điều khiển. Điều đó có vẻ hứa hẹn hơn mặc dù.

mtheme <- standard.theme("pdf") 
mtheme$layout.heights$bottom.padding <- -10 
plot1b <- update(plot1, scales=list(y=list(alternating=1, at=5:10, labels=paste(" ",c(5:10))))) 
plot2b <- update(plot2, par.settings=mtheme) 
pdf(file="temp.pdf") 
print(plot2b, split=c(1,1,1,2), more=TRUE) 
print(plot1b, split=c(1,2,1,2), more=F) 

enter image description here

+0

Tôi nghĩ nếu bạn chỉ có thêm một khoảng trống nữa thì nó sẽ khá gần, hoặc có thể được sắp xếp hoàn hảo. – joran

+0

@joran và @Aaron giải pháp của bạn về cơ bản hoạt động cho tôi. Để làm rõ nó là sự liên kết của trục y mà tôi đã quan tâm, nhưng ví dụ @Aarons độc đáo chỉ ra sự thay đổi về tỷ lệ khung hình (mà trước đây tôi chưa nhận thấy). Tôi đã áp dụng điều này cho dữ liệu thực của tôi, điều chỉnh (bằng mắt) 'trellis.par.set (layout.widths = list (ylab.axis.padding = VALUE))' như được gợi ý bởi @joran. Tôi thấy khó viết quy tắc vì chiều rộng của trục y không phải là hằng số (đối với các nhãn dữ liệu thực tế phức tạp hơn), nhưng tôi sẽ xem xét mã thiết lập bố cục lề trái. –

+0

Các nhãn trục y có thể được thay thế sau khi kết hợp các ô với 'c' không? –

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