13

以下は私が取り組んでいる例です。

require(lattice)
data(barley)
xyplot(yield ~ year | site, data = barley)

ここに画像の説明を入力

ストリップごとに異なるストリップの色を配置したいのですが、フォントの色も背景色で最適化されています。例えば:

strip background colors = c("black", "green4", "blue", "red", "purple", "yellow")
font color = c("white", "yellow", "white", "white", "green", "red")

最初のもののラフスケッチが提供されています: ここに画像の説明を入力 どうすればこれを達成できますか?

4

2 に答える 2

16

これは、クリーンで簡単にカスタマイズできるソリューションです。

myStripStyle()strip=の引数に渡される関数xyplot()は、カウンター変数which.panelを使用して色を選択しfactor.levels、現在プロットされているパネルの値も選択します。

設定をいじってみたい場合はbrowser()、 の定義のどこかに を入れmyStripStyle()てください。

bgColors <- c("black", "green4", "blue", "red", "purple", "yellow")
txtColors <- c("white", "yellow", "white", "white", "green", "red")

# Create a function to be passed to "strip=" argument of xyplot
myStripStyle <- function(which.panel, factor.levels, ...) {
    panel.rect(0, 0, 1, 1,
               col = bgColors[which.panel],
               border = 1)
    panel.text(x = 0.5, y = 0.5,
               font=2,
               lab = factor.levels[which.panel],
               col = txtColors[which.panel])
}    
xyplot(yield ~ year | site, data = barley, strip=myStripStyle)

ここに画像の説明を入力

于 2011-12-16T17:15:59.327 に答える
10

関数のスコープ外の変数を参照するのは賢明ではないかもしれません。

par.strip.text追加の引数を strip 関数に渡すために使用できます。par.strip.textはプロット レベルで定義でき、通常はテキスト表示プロパティの設定に使用されますが、リストであるため、変数をストリップ関数に持ち込むために使用できます。

bgColors <- c("black", "green4", "blue", "red", "purple", "yellow")
txtColors <- c("white", "yellow", "white", "white", "green", "red")

# Create a function to be passes to "strip=" argument of xyplot
myStripStyle <- function(which.panel, factor.levels, par.strip.text,
                     custBgCol=par.strip.text$custBgCol,
                     custTxtCol=par.strip.text$custTxtCol,...)     {
    panel.rect(0, 0, 1, 1,
            col = custBgCol[which.panel],
            border = 1)
    panel.text(x = 0.5, y = 0.5,
            font=2,
            lab = factor.levels[which.panel],
            col = custTxtCol[which.panel])
}
xyplot(yield ~ year | site, data = barley,
        par.strip.text=list(custBgCol=bgColors,
                            custTxtCol=txtColors),
        strip=myStripStyle)
于 2012-02-22T11:42:54.913 に答える