當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R xyplot 常見的二變量網格圖


R語言 xyplot 位於 lattice 包(package)。

說明

該幫助頁麵記錄了幾個常用的高級萊迪思函數。 xyplot 生成二元散點圖或時間序列圖,bwplot 生成 box-and-whisker 圖,dotplot 生成克利夫蘭點圖,barchart 生成條形圖,stripplot 生成一維散點圖。所有這些函數以及其他高級 Lattice 函數都響應一組通用參數,這些參數以一致的方式控製條件、布局、縱橫比、圖例、軸注釋和許多其他細節。這些參數在此幫助頁麵中進行了廣泛的說明,並且也應該用作其他高級函數的參考。

為了控製和定製每個麵板中的實際顯示,相應默認麵板函數的幫助頁麵通常會提供更多信息。特別是,這些幫助頁麵說明了調用相應高級函數時常用的許多參數,但這些參數是特定於它們的。

用法

xyplot(x, data, ...)
dotplot(x, data, ...)
barchart(x, data, ...)
stripplot(x, data, ...)
bwplot(x, data, ...)

## S3 method for class 'formula'
xyplot(x,
       data,
       allow.multiple = is.null(groups) || outer,
       outer = !is.null(groups),
       auto.key = lattice.getOption("default.args")$auto.key,
       aspect = "fill",
       panel = lattice.getOption("panel.xyplot"),
       prepanel = NULL,
       scales = list(),
       strip = TRUE,
       groups = NULL,
       xlab,
       xlim,
       ylab,
       ylim,
       drop.unused.levels = lattice.getOption("drop.unused.levels"),
       ...,
       lattice.options = NULL,
       default.scales,
       default.prepanel = lattice.getOption("prepanel.default.xyplot"),
       subscripts = !is.null(groups),
       subset = TRUE)

## S3 method for class 'formula'
dotplot(x,
        data,
        panel = lattice.getOption("panel.dotplot"),
        default.prepanel = lattice.getOption("prepanel.default.dotplot"),
        ...)

## S3 method for class 'formula'
barchart(x,
         data,
         panel = lattice.getOption("panel.barchart"),
         default.prepanel = lattice.getOption("prepanel.default.barchart"),
         box.ratio = 2,
         ...)

## S3 method for class 'formula'
stripplot(x,
          data,
          panel = lattice.getOption("panel.stripplot"),
          default.prepanel = lattice.getOption("prepanel.default.stripplot"),
          ...)

## S3 method for class 'formula'
bwplot(x,
       data,
       allow.multiple = is.null(groups) || outer,
       outer = FALSE,
       auto.key = lattice.getOption("default.args")$auto.key,
       aspect = "fill",
       panel = lattice.getOption("panel.bwplot"),
       prepanel = NULL,
       scales = list(),
       strip = TRUE,
       groups = NULL,
       xlab,
       xlim,
       ylab,
       ylim,
       box.ratio = 1,
       horizontal = NULL,
       drop.unused.levels = lattice.getOption("drop.unused.levels"),
       ...,
       lattice.options = NULL,
       default.scales,
       default.prepanel = lattice.getOption("prepanel.default.bwplot"),
       subscripts = !is.null(groups),
       subset = TRUE)

參數

x

lattice 中的所有高級函數都是通用的。 x 是執行方法調度的對象。

對於 "formula" 方法,x 必須是說明要在繪圖中使用的主要變量(用於 per-panel 顯示)和可選條件變量(定義在不同麵板中繪製的子集)的公式。下麵的 “Details” 部分說明了調節。

對於此處記錄的函數,公式通常采用 y ~ x | g1 * g2 * ... (或等效的 y ~ x | g1 + g2 + ... )形式,表示 y (在 y 軸上)與 x (在 x 軸上)的繪圖應該以變量 g1, g2, ... 為條件生成。這裏xy是主變量,g1, g2, ...是條件變量。可以省略條件變量以給出 y ~ x 形式的公式,在這種情況下,繪圖將由具有完整數據集的單個麵板組成。該公式還可以涉及表達式,例如 sqrt()log() 等。有關公式中各項求值的規則,請參閱下麵的 data 參數。

除了 xyplot 之外,此處記錄的函數也可以提供 ~ x | g1 * g2 * ... 形式的公式。在這種情況下,如果命名了x,則y 默認為names(x),否則為單個級別的因子。

x 不是公式的情況通過適當的方法處理。 numeric 方法相當於公式中沒有左側且沒有條件變量的調用。對於 barchartdotplot ,表和數組存在重要的方法,記錄在 barchart.table 中。

條件變量g1, g2, ... 必須是因子或帶狀皰疹。帶狀皰疹提供了一種使用數值變量進行調節的方法;有關詳細信息,請參閱shingle 的幫助頁麵。與因子一樣,它們具有 "levels" 屬性,用於生成條件圖。如有必要,可使用 shingle 函數將數值條件變量轉換為帶狀皰疹;然而,在許多情況下使用equal.count可能更合適。字符變量被強製為因子。

擴展公式接口:作為上述接口的有用擴展,主要變量項(LHS y 和 RHS x )可以由用“+”號分隔的多個項組成,例如 y1 + y2 ~ x | a * b 。該公式意味著用戶想要同時繪製 y1 ~ x | a * by2 ~ x | a * b ,但將 y1 ~ xy2 ~ x 疊加在每個麵板中。這兩組將通過不同的圖形參數來區分。如果 y1y2 連接起來產生一個更長的向量,這本質上就是 groups 參數(見下文)將產生的結果,而 groups 參數指示哪些行來自哪個變量。事實上,這正是使用reshape 函數在內部完成的操作。此函數不能與 groups 參數結合使用。

要將 y1 + y2 解釋為總和,可以設置 allow.multiple=FALSE 或使用 I(y1+y2)

此函數的一個變體是當 outer 參數設置為 TRUE 時。在這種情況下,圖不會疊加在每個麵板中,而是分成不同的麵板(就像添加了新的條件變量一樣)。

主變量: xy 變量在 xyplot 中都應該是數字,如果不是,則嘗試強製它們。但是,如果其中一個是因子,則該因子的水平將用作軸標簽。在此處記錄的其他四個函數中,xy 中的一個應該是數字,另一個應該是因子或木瓦。其中哪一個會發生由 horizontal 參數決定 - 如果 horizontal=TRUE ,則 y 將被強製為因子或木瓦,否則 x 。如果 x 是因子或木瓦,則 horizontal 的默認值為 FALSE,否則為 TRUE。 (horizontal=FALSE 提供的函數不是S-compatible。)

請注意,x 參數在早期版本中曾被稱為 formula(當高級函數不是泛型且公式方法本質上是唯一方法時)。這不再被允許。建議在任何情況下都不要命名該參數,而是將其作為第一個(未命名)參數。

data

對於 formula 方法,包含公式中任何變量的值的 DataFrame (或更準確地說,eval 中有效的 envir 參數的任何內容,例如列表或環境),以及 groupssubset(如果適用)。如果在 data 中找不到,或者未指定 data,則在公式的環境中查找變量。對於其他方法(其中x 不是公式),data 通常被忽略,如果顯式指定,通常會出現警告。

allow.multiple

指定上述擴展公式接口是否有效的邏輯標誌。隻要合理,默認為TRUE

outer

使用上述擴展接口控製公式發生的情況的邏輯標誌(有關詳細信息,請參閱 x 的條目)。默認為 FALSE ,除非顯式指定 groups 或分組對於默認麵板函數沒有意義。

box.ratio

適用於barchartbwplot 。指定矩形寬度與inter-rectangle空間的比率。另請參閱相應默認麵板函數中的box.width 參數。

horizontal

適用於 bwplotdotplotbarchartstripplot 的邏輯標誌。確定 xy 中的哪一個是因子或木瓦(如果為 TRUE,則為 y,否則為 x)。如果 x 是因子或木瓦,則默認為 FALSE,否則為 TRUE。該參數用於處理這些高級函數的參數,但更重要的是,它作為參數傳遞給麵板函數,麵板函數預計會酌情使用它。

在這種情況下, scales 的潛在有用組件可能是 abbreviate = TRUE ,在這種情況下,通常會重疊的長標簽將被縮寫。在這種情況下,scales 還可以包含 minlength 參數,該參數將傳遞給 abbreviate 函數。

通用參數:以下參數對於此處記錄的所有函數以及大多數其他高級 Trellis 函數都是通用的。除了覆蓋此處給出的用法之外,其他地方沒有記錄這些內容。

panel

一旦獲得由分組變量級別的每個唯一組合定義的行子集(參見“Details”),相應的xy變量(或其他變量,視情況而定,在其他高的情況下) -級函數)被傳遞到每個麵板中繪製。實際的繪圖是由 panel 參數指定的函數完成的。參數可以是函數對象或給出預定義函數名稱的字符串。每個高級函數都有自己的默認麵板函數,命名為“panel.”,後跟相應高級函數的名稱(例如panel.xyplotpanel.barchart等)。

Trellis Graphics 的大部分函數來自於定義自定義麵板函數的能力。適用於此處說明的函數的麵板函數通常需要名為 xy 的參數,這些參數將由調節過程提供。它還可以有其他參數。在這種情況下,了解傳遞給高級萊迪思函數(例如 xyplot )但未被其識別的所有參數都會傳遞給麵板函數是有用的。因此,在定義麵板函數時允許 ... 參數通常是一種很好的做法。此類額外參數通常控製圖形參數,但其他用途也很常見。有關詳細信息,請參閱各個麵板函數的文檔。

請注意,與 S-PLUS 不同,不保證麵板函數僅提供 xy 參數的數字向量;它們也可能是因子(但不是帶狀皰疹)。麵板函數需要處理這種情況,在大多數情況下,隻需將它們強製為數字即可完成。

從技術上講,麵板函數必須使用網格圖形函數來編寫。然而,構建新的自定義麵板函數通常不需要網格知識,因為有幾個預定義的麵板函數可以提供幫助;例如, panel.gridpanel.loess 等。還有一些常用傳統圖形函數的 grid-compatible 替代品對此很有用。例如, lines 可以替換為 llines (或等效的 panel.lines )。請注意,lines 等傳統圖形函數無法在點陣麵板函數中運行。

需要更多麵板函數的一種情況是 groups 參數不是 NULL 。在這種情況下,麵板函數還應該接受名為 groupssubscripts 的參數(詳細信息請參見下文)。在這種情況下預定義的一個有用的麵板函數是 panel.superpose ,它可以與不同的 panel.groups 函數組合來確定為每個組繪製的內容。有關以這種方式構建的交互圖,請參閱“Examples”部分。其他幾個麵板函數也可以處理 groups 參數,包括 xyplotbarchartdotplotstripplot 的默認參數。

即使 groups 不存在,麵板函數也可以將 subscripts 作為形式參數。無論哪種情況,傳遞給麵板函數的 subscripts 參數都是原始 data 中該麵板的 xy 數據的索引,然後再考慮 subset 參數的影響。請注意,groups 不受任何取子集操作的影響,因此 groups[subscripts] 給出與該麵板中的數據相對應的 groups 的值。

當使用擴展公式接口時(即,當 allow.multiple 有效時),subscripts 的這種解釋不成立。全麵的說明會過於複雜(詳細信息可以在函數latticeParseFormula的源代碼中找到),但簡而言之,擴展接口的工作原理是創建一個比原始 DataFrame 更長的人工分組變量,因此, subscripts需要引用原始數據之外的行。更複雜的是,人工分組變量是在 subset 產生任何影響之後創建的,在這種情況下 subscripts 可能與原始數據幀中的相應行沒有關係。

還可以在麵板函數內部使用名為 panel.numberpacket.number 的函數,分別表示麵板順序和數據包順序(以及條帶函數或使用 trellis.focus 等與點陣顯示器交互時)。兩者都提供了一個簡單的整數索引,指示當前正在繪製哪個麵板,但計算計數的方式有所不同。麵板編號是一個簡單的增量計數器,從 1 開始,每次繪製麵板時都會遞增。另一方麵,數據包編號索引了該麵板所表示的條件變量水平的組合。除非條件變量的順序被排列和/或一個或多個條件變量內水平的繪製順序被改變(分別使用perm.condindex.cond),否則兩個索引一致,在這種情況下packet.number給出對應的索引到條件變量水平組合的 ‘natural’ 排序。

panel.xyplot 有一個名為 type 的參數,這裏值得一提,因為它非常頻繁使用(並且如上所述,可以直接傳遞給 xyplot)。如果使用 groups 變量,panel.xyplot 調用 panel.superpose ,其參數也可以直接傳遞給 xyplotbwplot 和朋友的麵板函數應該有一個名為 horizontal 的參數,以考慮當 x 是因子或木瓦時的情況。

aspect

此參數控製麵板的物理縱橫比,所有麵板的物理縱橫比通常相同。它可以指定為比率(垂直尺寸/水平尺寸)或字符串。在後一種情況下,合法值為"fill"(默認值),它嘗試使麵板盡可能大以填充可用空間; "xy" ,根據 45 度傾斜規則計算縱橫比(參見banking ); "iso" 用於等距比例,其中設備上的物理距離與數據比例中的距離之間的關係對於兩個軸強製相同。

如果指定了 prepanel 函數並且它返回組件 dxdy ,則它們將用於銀行計算。否則,將使用默認預麵板函數中的值。並非所有默認的預麵板函數都會產生合理的銀行計算。

groups

要在 data 中計算的變量或表達式,預期充當每個麵板中的分組變量,通常用於通過改變顏色和線條類型等圖形參數來區分不同的組。形式上,如果指定了 groups,則 groupssubscripts 一起傳遞給麵板函數,該函數預計將處理這些參數。對於適合分組的高級函數,默認麵板函數可以處理分組。

當指定分組變量時,使用鍵(圖例)是很常見的。請參閱 keyauto.keysimpleKey 條目了解如何繪製 key 。

auto.key

一個邏輯列表或包含用作 simpleKey 參數的組件的列表。可以使用 lattice.options 設置默認值。

auto.key = TRUE 相當於 auto.key = list() ,在這種情況下,使用一組默認參數(可能取決於相關的高級函數)調用 simpleKeykey 參數的大多數有效組件都可以通過這種方式指定,因為 simpleKey 隻會將無法識別的參數添加到它生成的列表中。

auto.key 通常用於結合分組變量自動生成合適的圖例。如果 auto.key = TRUE ,如果還提供了 groups 參數,則會繪製合適的圖例,否則不會繪製。在列表形式中,auto.key 將修改由此生成的默認圖例。例如,auto.key=list(columns = 2) 將創建一個分為兩列的圖例(columns 記錄在 key 的條目中)。

更準確地說,如果 auto.key 不是 FALSEgroups 不為空,並且調用中沒有指定 keylegend 參數,則使用 simpleKeylevels(groups) 創建 key 作為第一個 (text) 參數。 (注意:這可能不適用於所有高級函數,但它確實適用於使用默認麵板函數進行分組的函數)。如果 auto.key 作為列表提供並包含 text 組件,則該組件將用作鍵中的文本標簽,並且即使未指定 groups,也會繪製鍵。

請注意,simpleKey 使用默認設置(請參閱 trellis.par.get )來確定鍵中的圖形參數,因此隻有在繪圖中也使用相同的設置時,生成的圖例才有意義。 par.settings 參數可能與 simpleTheme 結合使用,可用於為此目的臨時修改默認設置。

直接使用 key (甚至 simpleKey )的一個缺點是, key 中使用的圖形參數在創建 "trellis" 對象時絕對確定。因此,如果使用不同的設置重新創建繪圖後,plot,原始參數設置將用於鍵,即使新設置用於實際顯示。但是,對於 auto.key , key 實際上是在繪圖時創建的,因此設置將匹配。

prepanel

一個函數,它采用與 panel 函數相同的參數並返回一個列表,可能包含名為 xlimylimdxdy 的組件(不太常見的是 xatyat )。用戶提供的預麵板函數的返回值不需要包含所有這些組件;如果缺少某些內容,它們將被component-wise 默認值替換。

xlimylim 組件類似於高級 xlimylim 參數(即,它們通常是定義範圍的長度為 2 的數值向量,或表示因子級別的字符向量)。如果在高級調用中未顯式指定 xlimylim 參數(可能作為 scales 中的組件),則保證麵板的實際限製包括 prepanel 函數返回的限製。如果 scalesrelation 組件是 "same" ,則會在全局範圍內發生這種情況,否則在 per-panel 基礎上發生。

dxdy 組件用於在 aspect 指定為 "xy" 的情況下進行銀行計算。有關詳細信息,請參閱banking 的文檔。

如果 xlimylim 是字符向量(當相應變量是因子時適用),這隱式指示比例應包括前 n 整數。其中 nxlimylim 的長度,視情況而定。字符向量的元素用作這些 n 整數的默認標簽。因此,為了使該信息在麵板之間保持一致,xlimylim 值應代表相應因子的所有級別,即使某些級別未在該特定麵板中使用。

在這種情況下,prepanel 函數可能會返回附加組件 xatyat,該組件應該是 1:n 的子集,指示哪些 n 值(級別)實際表示在控製板。當使用 scales 中的 relation="free"relation="sliced" 計算限製時,這非常有用。

xy (等)變量是零長度向量時,預麵板函數負責提供有意義的返回值。如果沒有其他合適的值,則應為 xlimylim 組件返回 NA 值。

strip

邏輯標誌或函數。如果是 FALSE ,則不會繪製條帶。否則,將使用 strip 函數繪製條帶,該函數默認為 strip.default 。請參閱 strip.default 的文檔以查看 strip 函數可用的參數。此說明也適用於 strip.left 參數(請參閱下麵的 ...),該參數可用於在每個麵板的左側繪製條帶(對於寬短麵板很有用,例如在時間序列圖中)。

xlab

為 x 軸提供標簽的字符或表達式(或 "grob" )。通常默認為定義繪圖的公式中 x 的表達式。可以指定為 NULL 以完全省略標簽。可以進行更精細的控製,如 main 條目中所述,並進行修改:如果從列表中省略 label 組件,則將其替換為默認的 xlab

ylab

為 y 軸提供標簽的字符或表達式(或 "grob" )。通常默認為定義繪圖的公式中 y 的表達式。可以進行更精細的控製,請參閱 mainxlab 的條目。

scales

通常是確定如何繪製 x 軸和 y 軸(刻度線和標簽)的列表。該列表包含name=value 形式的參數,並且還可以包含相同形式的另外兩個列表,稱為xy(如下所述)。 xy 的組件僅影響各自的軸,而 scales 中的組件影響兩者。當在兩個列表中指定參數時,將使用xy 中的值。請注意,某些高級函數具有特定於特定軸的默認值(例如,bwplot 僅針對分類軸有 alternating=FALSE);這些隻能被 scales 相應組件中的條目覆蓋。

作為特殊例外,scales(或其xy 組件)也可以是字符串,在這種情況下,它被解釋為relation 組件。

可能的組件有:

relation

確定如何計算每個麵板的軸限製的字符串。可能的值為 "same" (默認)、"free""sliced" 。對於 relation="same" ,相同的限製(通常大到足以包含所有數據)用於所有麵板。對於 relation="free" ,每個麵板的限製僅由該麵板中的點確定。 relation="sliced" 的行為類似,隻是刻度的長度(最大 - 最小)被限製在麵板之間保持相同。

確定適合每個麵板的軸限製可以通過 prepanel 函數控製,該函數可以由 xlimylimscales$limits 覆蓋(除非 relation="sliced" ,在這種情況下明確指定限製被忽略並帶有警告)。當 relation"free" 時,xlimylim 可以是一個列表,在這種情況下,它被視為其組件是從每個麵板的預麵板計算中獲得的極限值(如有必要,則在複製後) 。

tick.number

一個整數,給出建議的刻度之間的間隔數。對於因子、木瓦或字符向量,這會被忽略,因為在這些情況下,不存在省略某些標簽的自然規則。但請參閱xlim

draw

邏輯標誌,默認為 TRUE ,決定是否繪製軸(即刻度線和標簽)。

alternating

通常是一個邏輯標誌,指定軸標簽是否應從麵板組的一側交替到另一側。為了更精細的控製,alternating 也可以是由以下數字組成的向量(複製到與每頁的行數或列數一樣長)

  • 0:不繪製刻度標簽

  • 1:底部/左側

  • 2:頂部/右側

  • 3:兩者都有。

alternating 僅在 relation="same" 時適用。默認值為 TRUE ,或等效的 c(1, 2)

limits

xlimylim 相同。

at

刻度線沿軸的位置(在本機坐標中),或與說明每個麵板的刻度位置的麵板數量一樣長的列表。

labels

at 一起使用的標簽(字符或表達式)向量。也可以是類似 at 的列表。

cex

用於控製軸標簽字符大小的數字乘數。可以是長度為2的向量,分別控製左/下和右/上標簽。

font , fontface , fontfamily

指定用於軸標簽的字體。

lineheight

指定行高參數(行高為文本大小的倍數);與多行標簽相關。 (目前 cloud 會忽略這一點。)

tck

通常是控製刻度線長度的數字標量。也可以是長度為2的向量,分別控製左/下和右/上刻度線的長度。

col

刻度線和標簽的顏色。

rot

軸標簽旋轉的角度(以度為單位)。可以是長度為 2 的向量,分別控製左/下和右/上軸。

abbreviate

邏輯標誌,指示是否使用abbreviate函數縮寫標簽。對於長標簽(例如,以因子為單位)非常有用,尤其是在 x 軸上。

minlength

如果 abbreviate=TRUE 則參數傳遞給 abbreviate

log

控製相應的變量( xy )在傳遞給麵板函數之前是否進行對數轉換。默認為 FALSE ,在這種情況下數據不會被轉換。其他可能的值是作為對數基數的任何數字、TRUE(相當於 10)和"e"(用於自然對數)。作為副作用,相應的軸被不同地標記。請注意,這實際上是數據的轉換,而不是軸的轉換。除了軸標記之外,使用此函數與轉換公式中的數據沒有什麽不同;例如, scales=list(x = list(log = 2)) 相當於 y ~ log2(x)

有關如何控製軸標簽的詳細信息,請參閱下麵的 equispaced.log 條目。

equispaced.log

一個邏輯標誌,指示使用“對數刻度”時刻度線位置是否應等距。默認為 TRUE

刻度線始終以原始(未轉換)比例進行標記,但這使得刻度線位置的選擇變得非常重要。如果 equispaced.logFALSE ,則所做的選擇類似於傳統圖形中對數刻度的注釋方式。如果 TRUE ,則刻度線位置選擇為變換比例中的 ‘pretty’ 等距值,並以 "base^loc" 形式標記,其中 base 是對數變換的基數,loc 是變換後的尺度。

另請參閱latticeExtra 包中的xscale.components.logpower

format

用於 POSIXct 變量的 format。有關有效值的說明,請參閱strptime

axs

字符串 "r" (默認)或 "i" 。在後一種情況下,軸限製被計算為精確的數據範圍,而不是在任一側填充。 (可能並不總是按預期工作。)

請注意,scales 的大部分函數是由splom 中的pscales 完成的。

subscripts

一個邏輯標誌,指定是否應將名為 subscripts 的向量傳遞給麵板函數。默認為 FALSE ,除非指定 groups ,或者麵板函數接受名為 subscripts 的參數。如果即使這些條件不成立,但仍希望傳遞下標,則此參數很有用;一個典型的例子是,當人們希望在繪製格子圖後對其進行擴充時,例如使用 panel.identify

subset

計算結果為邏輯或整數索引向量的表達式。與 groups 一樣,它在 data 中進行評估。僅 data 的結果行用於繪圖。如果 subscriptsTRUE ,則提供給麵板函數的下標將是引用子集之前的 data 行的索引。數據幀中子集化後未使用的因子級別是否會被刪除取決於drop.unused.levels 參數。

xlim

通常,長度為 2 的數值向量(或 DateTime 對象)給出 x 軸的左右限製,或字符向量,預計表示 x 的級別。後一種形式被解釋為包含 c(1, length(xlim)) 的範圍,其中字符向量確定刻度位置 1:length(xlim) 處的標簽。

xlim 也可以是一個列表,其中包含與麵板數量一樣多的組件(如有必要,可回收),每個組件如上所述。僅當 scales$x$relation"free" 時,這才有意義,在這種情況下,這些值將被視為前麵板計算返回的相應限製分量。

ylim

xlim 類似,應用於 y 軸。

drop.unused.levels

一個邏輯標誌,指示是否將刪除未使用的因子級別,通常在執行子集操作或創建 interaction 時相關。未使用的級別通常會被刪除,但有時適當地抑製刪除以保留有用的布局。為了更好地控製,該參數也可以是包含組件 conddata 的列表,這兩個組件都是邏輯的,分別指示條件變量和主變量的期望行為。默認值由 lattice.getOption("drop.unused.levels") 給出,兩個組件的初始值均設置為 TRUE。請注意,此參數不控製 groups 參數級別的刪除。

default.scales

給出特定高級函數的 scales 默認值的列表。 end-user 很少對此感興趣,但在定義充當高級萊迪思函數之一的包裝器的其他函數時可能會有所幫助。

default.prepanel

函數或字符串,給出函數名稱,當未指定 prepanel 參數或未返回所有必需組件時,該函數用作 (component-wise) 後備預麵板函數。此參數的主要目的是通過使用 lattice.options 來覆蓋默認值。

lattice.options

可以提供給 lattice.options 的列表。這些選項會在調用期間臨時應用,之後設置將恢複為之前的狀態。這些選項與對象一起保留並在繪圖期間重複使用。這使用戶能夠將選項設置附加到網格對象本身,而不是全局更改設置。另請參閱下麵說明的 par.settings 參數,以了解圖形設置的類似處理。

...

更多參數,通常不會由此處記錄的高級函數直接處理,而是傳遞給其他函數。這些參數可以大致分為兩類:那些以類似方式影響所有高級萊迪思函數的參數,以及那些針對正在使用的特定麵板函數的參數。

第一組參數由名為 trellis.skeleton 的通用未導出函數處理。這些參數影響所有高級函數,但僅在此處記錄(除了覆蓋此處說明的行為)。在高級調用中指定的所有其他參數,特別是那些既沒有在此處說明也沒有在相關高級函數的幫助頁麵中說明的參數,將原封不動地傳遞給所使用的麵板函數。按照慣例,用於任何高級函數的默認麵板函數被命名為“panel.”,後跟高級函數的名稱;例如bwplot的默認麵板函數是panel.bwplot。實際上,這意味著除了所使用的高級函數的幫助頁麵之外,用戶還應該查閱相應麵板函數的幫助頁麵以獲取在高級調用中可能指定的參數。

第一組公共參數的效果如下:

as.table

控製麵板顯示順序的邏輯標誌:如果FALSE(默認值),則麵板從左到右、從下到上繪製(如圖所示);如果 TRUE ,從左到右,從上到下(如表中所示)。

between

包含組件 xy(默認情況下兩者通常均為 0)、指定麵板之間空間的數字向量(單位是字符高度)的列表。重複 xy 以考慮頁麵中的所有麵板,並忽略任何額外組件。結果用於多頁顯示中的所有頁麵。換句話說,不可能對不同的頁麵使用不同的between值。

key

定義要在繪圖上繪製的圖例的列表。該列表用作 draw.key 函數的參數,該函數生成最終由 "trellis" 對象的 print 方法繪製的 "grob"(網格對象)。圖例的結構受到下述方式的限製。

雖然這樣的列表可以並且通常是顯式創建的,但也可以使用 simpleKey 函數生成這樣的列表;後者更方便但靈活性較差。對於使用圖例的最常見情況(即與分組變量結合使用),auto.key 參數甚至更加方便。要使用多個圖例,或者要具有不受 key 強加的結構約束的任意圖例,請使用 legend 參數。

按鍵的位置可以通過兩種可能的方式之一進行控製。如果存在名為 space 的組件,則鍵位於繪圖區域之外的四個邊之一,由 space 的值確定,該值可以是以下之一: "top""bottom""left""right" 。或者,可以通過指定組件 xycorner 將鍵定位在繪圖區域內。 xy 確定 corner 給出的鍵角的位置,通常是以下之一: c(0,0)c(1,0)c(1,1)c(0,1) ,它們表示鍵的角點單位平方。小數值也是允許的,在這種情況下,xy 確定鍵內部(或單位間隔之外的值的外部)任意點的位置。

xy 應為 0 到 1 之間的數字,給出相對於 “display area” 的坐標。根據 "legend.bbox" 選項的值(請參閱 lattice.getOption ),這可以是完整的圖形區域 ( "full" ),也可以隻是邊接口板和條帶的區域 ( "panel" )。

鍵本質上由許多列組成,可能分為塊,每個塊包含一些行。 key 的內容由名為 "rectangles""lines""points""text" 的組件確定(可能重複)。其中每一個都必須列出並具有控製其外觀的相關圖形參數(見下文)。 key 列表本身可以包含圖形參數,如果從其他組件中省略相關圖形組件,則將使用這些參數。

每個此類列("text" 除外)的長度(行數)被視為圖形組件的最大長度,包括外部指定的組件(有關此內容的詳細信息,請參閱下麵的 rep 條目)。 "text" 組件必須有一個字符或表達式向量作為其第一個組件,才能用作標簽。該向量的長度決定了行數。

可以包含在 key 以及名為 "text""lines""points""rectangles" (視情況而定)的組件中的圖形組件包括:

  • cex=1(文本、線條、點)

  • col="black"(文本、矩形、線條、點)

  • alpha=1(文本、矩形、線條、點)

  • fill="transparent"(線、點)

  • lty=1(行)

  • lwd=1(線、點)

  • font=1(文本、點)

  • fontface(文本、點)

  • fontfamily(文本、點)

  • pch=8(線、點)

  • adj=0(文本)

  • type="l"(行)

  • size=5(矩形、直線)

  • height=1(矩形)

  • lineheight=1(文本)

  • angle=0(矩形,但被忽略)

  • density=-1(矩形,但被忽略)

另外,border組件可以包含在"rect"組件內部,用於控製矩形的邊框顏色;當在頂層指定時,border 控製整個鍵的邊框(見下文)。

angledensity 未實現。 size 確定矩形的列寬和字符寬度中的行寬。 type 與行相關; "l"表示線,"p"表示點,"b""o"同時表示兩者。 height 給出矩形高度作為默認值的一部分。

key 的其他可能組件有:

reverse.rows

邏輯標誌,默認為 FALSE 。如果是 TRUE ,則複製後所有組件都會反轉(具體取決於 rep 的值)。這在某些情況下很有用,例如,將 barchartstack = TRUE 分組,並在垂直軸上分類變量,圖中的條形通常從下到上排序,但相應的圖例將具有從上到下的級別,除非 reverse.rows = TRUE 。請注意,在這種情況下,除非所有列具有相同的數字或行,否則它們將不再對齊。

between

給出每列周圍空間量(字符寬度)的數值向量(在兩側均等分割)。

title

給出鍵標題的字符串或表達式。

rep

邏輯標誌,默認為 TRUE 。默認情況下,假定鍵中的所有列("text" 除外)都具有相同的行數,並且所有組件都被複製為與最長的一樣長。這可以通過指定 rep=FALSE 來抑製,在這種情況下,每列的長度將由該列的組件單獨確定。

cex.title

標題的縮放係數。

lines.title

標題在行中占據的垂直空間量(其自身的倍數)。默認為 2。

padding.text

包含文本的每行上方和下方使用的空間量(填充),為默認值的倍數,當前為 0.2 * "lines" 。此填充是在包含文本的任何行的正常高度之外添加的,這是包含所有文本條目所需的最小高度。

background

圖例的背景顏色。默認為全局背景顏色。

alpha.background

背景的 alpha 透明度值介於 0 和 1 之間。

border

邊框顏色或邏輯標誌。在後一種情況下,如果 borderTRUE ,則邊框顏色為黑色;如果 FALSE (默認),則不繪製邊框。

transparent=FALSE

邏輯標誌,圖例是否應該有透明背景。

just

長度為 1 或 2 的字符或數字向量,給出圖例放置的水平和垂直對齊方式。有關更精確的詳細信息,請參閱grid.layout

columns

圖例要分為column-blocks(並排繪製)的數量。

between.columns

除了 between 之外,列塊之間的空間。

divide

typelines 中的 "b""o" 時,每行劃分的點符號的數量。

legend

如果想要放置多個鍵,則 legend 參數可能很有用。它還允許使用任意 "grob" (網格對象)作為圖例。

如果使用,legend 必須是一個列表,具有任意數量的組件。每個組件必須命名為 "left""right""top""bottom""inside" 之一。名稱 "inside" 可以重複,但其他名稱不能重複。此名稱將用於確定該組件的位置,類似於 keyspace 組件。如果指定 key (或 colorkey 對於 levelplotwireframe ),則它們的 space 組件不得與 legend 的任何組件的名稱衝突。

legend 的每個組件都必須有一個名為 fun 的組件。這可以是 "grob" ,也可以是調用時生成 "grob" 的函數(或函數的名稱)。如果此函數需要任何參數,則必須將它們作為另一個名為 args 的組件中的列表提供。對於名為 "inside" 的組件,可以有名為 xycorner 的附加組件,其工作方式與 key 相同。

page

繪製每一頁後調用的一個參數(頁碼)的函數。該函數必須是‘grid-compliant’,並且以整個顯示區域作為默認視口來調用。

xlab.topylab.right

x 軸的標簽位於頂部,y 軸的標簽位於右側。與 xlabylab 類似,但不太常用。

main

通常是說明要放置在每個頁麵頂部的主標題的字符串或表達式。默認為 NULL

main (以及 xlabylabsub )通常是用作標簽的字符串或表達式,但也可以是控製更多細節的列表。表達式被視為 LaTeX-like 標記的規範,如 plotmath 中所述。標簽可以是向量,在這種情況下,組件將水平間隔(或 ylab 垂直間隔)。此函數可用於提供列或行標簽,而不是單個軸標簽。

main(等)是列表時,實際標簽應指定為label組件(如果是第一個組件,則可以未命名)。標簽可能會丟失,在這種情況下,將使用默認值(xlabylab 通常有默認值,但 mainsub 沒有)。更多命名參數將傳遞給 textGrob ;這可以包括控製定位的參數,如justrot,以及圖形參數,如colfont(完整列表請參見gpar)。

mainsubxlabylabxlab.topylab.right 也可以是任意 "grob" (網格圖形對象)。

sub

要放置在每頁底部的字幕的字符串或表達式(或列表或 "grob" )。請參閱 main 條目以獲取更精細的控製選項。

par.strip.text

用於控製條帶文本外觀的參數列表。值得注意的組件是 colcexfontlines 。前三個控製圖形參數,而最後一個是改變條帶高度的方法。例如,如果條帶標簽(例如,從因子水平派生)是雙倍高度(即包含"\n" -s)或者默認高度看起來太小或太大,這可能很有用。

此外,lineheight 組件可以控製多行之間的間距。通過指定 abbreviate = TRUE 顯示時可以縮寫標簽,在這種情況下,可以指定組件 minlengthdot(傳遞給 abbreviate 函數)來控製如何完成此操作的詳細信息。

layout

一般來說,Lattice 中的條件圖由排列成矩形陣列的多個麵板組成,可能跨越多個頁麵。 layout 決定了這種安排。

layout 是長度為 2 或 3 的數值向量,給出多麵板顯示中的列數、行數和頁數(可選)。默認情況下,列數是第一個條件變量的級別數,行數是第二個條件變量的級別數。如果隻有一個條件變量,則默認布局向量為 c(0,n) ,其中 n 是給定向量的級別數。任何時候布局向量中的第一個值為 0 時,第二個值將用作每頁所需的麵板數量,並據此計算實際布局,同時考慮麵板的長寬比和設備尺寸(通過 par("din") )。如果為行數或列數(但不是兩者)指定NA,則將根據麵板數填寫該維度。

頁數默認設置為繪製所有麵板所需的頁數,因此很少需要指定。但是,在某些情況下,默認計算可能不正確,在這種情況下需要明確指定頁數。

skip

邏輯向量(默認 FALSE ),複製到與麵板數量一樣長(跨越所有頁麵)。對於 TRUE 的元素,跳過對應的麵板位置;即,該位置沒有繪製任何內容。原本應該繪製在那裏的麵板現在繪製在下一個可用麵板位置,並且所有後續麵板的位置都相應地向上移動。這對於以信息豐富的方式排列繪圖可能很有用。

strip.left

strip.left 可用於在每個麵板的左側繪製條帶,這對於寬短麵板非常有用,如時間序列(或類似)圖中。有關詳細用法,請參閱 strip 條目。

xlab.defaultylab.default

未指定時 xlabylab 的後備默認值。如果是 NULL ,則默認值是從網格公式中解析的。這對於 end-user 很少有用,但在開發新的萊迪思函數時很有幫助。

xscale.componentsyscale.components

分別確定 x 軸和 y 軸的軸注釋的函數。請參閱xscale.components.default(這些參數的默認值)的文檔以了解更多信息。

axis

負責繪製軸注釋的函數。請參閱axis.default(此參數的默認值)的文檔以了解更多信息。

perm.cond

一個整數向量,1:n 的排列,其中 n 是條件變量的數量。默認情況下,繪製麵板的順序取決於公式中指定的條件變量的順序。 perm.cond可以修改這個順序。如果將網格顯示視為 n 維數組,則在打印期間,將使用 perm.cond 排列其維度,就像 perm 參數在 aperm 中所做的那樣。

index.cond

perm.cond 排列多維麵板數組的維度,而 index.cond 可用於對該數組的邊距進行子集化(或重新排序)。 index.cond 可以是列表或函數,每種情況下的行為如下所述。

每個調節變量內的麵板顯示順序取決於其級別的順序。 index.cond 可用於選擇這些級別的 ‘subset’(在 R 意義上),然後將其用作該變量的顯示順序。如果 index.cond 是一個列表,則它必須與條件變量的數量一樣長,並且第 i 分量必須是 levels(g_i) 的有效索引向量,其中 g_ii圖中的第 -th 條件變量(請注意,這些級別可能不包含原始變量的所有級別,具體取決於 subsetdrop.unused.levels 參數的影響)。特別是,該索引可能會重複級別,或者完全刪除一些級別。該索引的結果決定了該條件變量中麵板的順序。要保持特定變量的順序不變,必須將相應的組件設置為 TRUE

請注意, index.cond 的組件按照原始調用中條件變量的順序進行解釋,並且不受 perm.cond 的影響。

另一種可能性是將 index.cond 指定為函數。在這種情況下,每個麵板都會調用此函數一次,可能會使用傳遞給該麵板的麵板函數的所有參數。 (更具體地說,如果此函數具有 ... 參數,則傳遞所有麵板參數,否則,僅傳遞匹配的命名參數。)如果隻有一個條件變量,則對該變量的級別進行排序,以便這些值按升序排列。對於多個條件變量,每個變量的順序是通過首先取所有其他條件變量的平均值來確定的。

雖然它們可以直接在高級函數調用中提供,但更典型的是使用 perm.condindex.cond 來更新現有的 "trellis" 對象,從而允許它以不同的排列方式顯示,而無需重新計算進入每個麵板的數據子集。在 update.trellis 方法中,兩者都可以設置為 NULL ,這會將它們恢複為默認值。

par.settings

可以提供給 trellis.par.set 的列表。繪製生成的對象時,這些選項會在繪製期間臨時應用,之後設置將恢複為之前的狀態。這使得用戶能夠將一些顯示設置附加到網格對象本身,而不是全局更改設置。另請參閱上麵說明的 lattice.options 參數,以了解對非圖形選項的類似處理。

plot.args

包含 plot.trellis 的可能參數的列表,繪製對象時將由 plotprint 方法使用,除非顯式覆蓋。這使得用戶能夠將此類參數附加到網格對象本身。不執行部分匹配。

細節

此處記錄的高級函數以及其他高級萊迪思函數都是通用的,formula 方法通常執行最重要的工作。生成的圖的結構主要由公式控製(在非公式方法的情況下隱式控製)。對於條件變量 g1, g2, ... 級別的每個唯一組合,都會生成一個單獨的 “packet”,其中由該組合定義的數據子集的點 (x,y) 組成。顯示器可以被認為是一個三維麵板陣列,每頁由一個二維矩陣組成。該數組的維度由layout 參數確定。如果沒有條件變量,則生成的圖由單個數據包組成。每個數據包通常對應一個麵板,但這並不是絕對必要的(請參閱上麵index.cond 的條目)。

lattice默認使用的坐標係就像一個圖表,原點位於左下角,軸向右和頂部遞增。特別是,默認情況下,麵板是從左下角開始,向右然後向上繪製的,除非 as.table = TRUE ,在這種情況下,麵板是從左上角開始,向右然後向下繪製的。可以通過將默認值更改為 as.table=TRUE 來設置 table-like 排列的全局首選項;這可以通過設置 lattice.options(default.args = list(as.table = TRUE)) 來完成。可以通過這種方式為以下參數設置默認值: as.table , aspect , between , page , main , sub , par.strip.text , layout , skipstrip 。請注意,這些全局默認值有時會被各個函數覆蓋。

麵板的順序取決於指定條件變量的順序, g1 變化最快,其次是 g2 ,依此類推。在條件變量中,順序取決於級別的順序(對於因子來說通常按字母順序排列)。這兩個順序都可以使用 index.condperm.cond 參數進行修改,也可以使用 update(和其他相關)方法。

此處記錄的高級函數以及其他高級萊迪思函數返回類 "trellis" 的對象。 update 方法可用於隨後更新對象的組件,而 print 方法(通常默認調用)會將其繪製在適當的繪圖設備上。

注意

此處記錄的大多數參數也適用於 lattice 包中的其他高級函數。除非相關,否則不會在其他地方詳細說明這些內容,並且應將其視為此類論點的規範文檔。

傳遞給這些函數但未被它們識別的任何參數都將傳遞給麵板函數。大多數預定義的麵板函數都具有自定義其輸出的參數。這些參數僅在這些麵板函數的幫助頁麵中進行說明,但通常可以作為高級繪圖的參數提供。

例子

require(stats)

## Tonga Trench Earthquakes

Depth <- equal.count(quakes$depth, number=8, overlap=.1)
xyplot(lat ~ long | Depth, data = quakes)
update(trellis.last.object(),
       strip = strip.custom(strip.names = TRUE, strip.levels = TRUE),
       par.strip.text = list(cex = 0.75),
       aspect = "iso")

## Extended formula interface 

xyplot(Sepal.Length + Sepal.Width ~ Petal.Length + Petal.Width | Species,
       data = iris, scales = "free", layout = c(2, 2),
       auto.key = list(x = .75, y = .75, corner = c(0.5, 0.5)))

## user defined panel functions

states <- data.frame(state.x77,
                     state.name = dimnames(state.x77)[[1]],
                     state.region = state.region)
xyplot(Murder ~ Population | state.region, data = states,
       snames = states$state.name,
       panel = function(x, y, subscripts, snames) {
           panel.text(x = x, y = y, labels = snames[subscripts], cex = 1,
                      fontfamily = "HersheySans")
       })

## Stacked bar chart

barchart(yield ~ variety | site, data = barley,
         groups = year, layout = c(1,6), stack = TRUE,
         auto.key = list(space = "right"),
         ylab = "Barley Yield (bushels/acre)",
         scales = list(x = list(rot = 45)))

bwplot(voice.part ~ height, data = singer, xlab = "Height (inches)")

dotplot(variety ~ yield | year * site, data=barley)

## Grouped dot plot showing anomaly at Morris

dotplot(variety ~ yield | site, data = barley, groups = year,
        key = simpleKey(levels(barley$year), space = "right"),
        xlab = "Barley Yield (bushels/acre) ",
        aspect=0.5, layout = c(1,6), ylab=NULL)

stripplot(voice.part ~ jitter(height), data = singer, aspect = 1,
          jitter.data = TRUE, xlab = "Height (inches)")

## Interaction Plot

xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
       type = "a",
       auto.key =
       list(space = "right", points = FALSE, lines = TRUE))

## longer version with no x-ticks

## Not run: 
bwplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
       panel = "panel.superpose",
       panel.groups = "panel.linejoin",
       xlab = "treatment",
       key = list(lines = Rows(trellis.par.get("superpose.line"),
                  c(1:7, 1)),
                  text = list(lab = as.character(unique(OrchardSprays$rowpos))),
                  columns = 4, title = "Row position"))

## End(Not run)

作者

Deepayan Sarkar Deepayan.Sarkar@R-project.org

參考

Sarkar, Deepayan (2008) Lattice: Multivariate Data Visualization with R, Springer. http://lmdvr.r-forge.r-project.org/

也可以看看

Lattice 包的概述,以及 barchart.table , print.trellis , shingle , banking , reshape , panel.xyplot , panel.bwplot , panel.barchart , panel.dotplot , panel.stripplot , panel.superpose , panel.loess , panel.average , strip.default , simpleKey trellis.par.set

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Common Bivariate Trellis Plots。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。