2016-01-21 88 views
0

我有兩個格子對象,我想用c.trellislatticeExtra(這兩個數字可以下載here)組合使用。正如您在下面看到的,結果圖繼承了第一個圖中的刻度標籤,而第二個圖中的標籤被丟棄。使用c.trellis時是否可以保留不同的y軸刻度標籤?使用`c.trellis`時保持自定義刻度標籤

library(latticeExtra) 

rsq_plt <- readRDS("rsq.rds") 
err_plt <- readRDS("err.rds") 

latticeExtra:::c.trellis(rsq_plt, err_plt, layout = c(1, 2)) 

plot

+0

'c.trellis'會結合你的2個格對象轉換成一個 - 用一組標籤,等我建議'print.trellis'顯示多個格子的對象。特別參見'print.trellis'中的第一個例子。 – DaveTurek

回答

0

只是爲了記錄在案,好像我終於想出了一個妥善的解決辦法,以感謝爲網格圖全面的自定義選項。在執行c.trellis之前禁用scales(通過scales = list(draw = FALSE);請注意,文件'rsq.rds'已在線更改),然後使用定製的y軸組合圖解決問題。

## combine plots and increase left padding 
plt <- latticeExtra:::c.trellis(rsq_plt, err_plt, layout = c(1, 2)) 
plt <- update(plt, 
       scales = list(draw = FALSE), 
       par.settings = list(
       layout.widths = list(left.padding = 6, right.padding = 0), 
       layout.heights = list(top.padding = 0, bottom.padding = 0) 
      )) 

## custom panel.axis 
panel.fun <- function(...) { 

    # allow to draw labels outside panel 
    trellis.par.set("clip", list(panel = "off", strip = "off")) 

    # add upper y-axis 
    if (panel.number() == 1) { 
    panel.axis("left", at = 1, tck = .5, outside = TRUE, 
       labels = expression("r"^2)) 
    panel.abline(v = 1, lty = 3, lwd = 1, col = "red") 
    panel.dotplot(lwd = .5, ...) 
    } 

    # add lower y-axis 
    if (panel.number() == 2) { 
    panel.axis("left", at = 2:4, outside = TRUE, tck = .5, 
       labels = c("MAE", "ME", "RMSE")) 
    panel.abline(v = 0, lty = 3, lwd = 1, col = "red") 
    panel.dotplot(..., lwd = 0.5) 
    } 
} 

## apply custom axes 
update(plt, panel = panel.fun) 

solution