データの編集を回避するソリューションは次のとおりです。
プロットがgroup
レベルを持つデータフレームの一部によってファセットされているとしますcontrol, test1, test2
。次に、それらの値で名前が付けられたリストを作成します。
hospital_names <- list(
'Hospital#1'="Some Hospital",
'Hospital#2'="Another Hospital",
'Hospital#3'="Hospital Number 3",
'Hospital#4'="The Other Hospital"
)
次に、「ラベラー」関数を作成し、それを facet_grid 呼び出しにプッシュします。
hospital_labeller <- function(variable,value){
return(hospital_names[value])
}
ggplot(survey,aes(x=age)) + stat_bin(aes(n=nrow(h3),y=..count../n), binwidth=10)
+ facet_grid(hospital ~ ., labeller=hospital_labeller)
...
これは、データ フレームのレベルを使用して Hospital_names リストにインデックスを付け、リストの値 (正しい名前) を返します。
これは、ファセット変数が 1 つしかない場合にのみ機能することに注意してください。2 つのファセットがある場合、ラベラー関数はファセットごとに異なる名前ベクトルを返す必要があります。次のようなものでこれを行うことができます:
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else {
return(facet2_names[value])
}
}
facet1_names
とfacet2_names
は、ファセット インデックス名 ('Hostpital#1' など) によってインデックス付けされた名前の定義済みリストです。
編集:ラベラーが知らない変数/値の組み合わせを渡すと、上記の方法は失敗します。次のように、未知の変数のフェイルセーフを追加できます。
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else if (variable=='facet2') {
return(facet2_names[value])
} else {
return(as.character(value))
}
}
facet と margin=TRUE を使用して ggplot で strip.text ラベルを変更する方法からの回答
編集:警告: この方法を使用して文字列でファセットを作成している場合、誤ったラベルが表示される可能性があります。このバグレポートを参照してください。ggplot2 の最近のバージョンで修正されました。