Berikut ini adalah solusi yang menghindari pengeditan data Anda:
Katakanlah plot group
Anda difasilitasi oleh bagian kerangka data Anda, yang memiliki level control, test1, test2
, lalu buat daftar yang dinamai dengan nilai-nilai tersebut:
hospital_names <- list(
'Hospital#1'="Some Hospital",
'Hospital#2'="Another Hospital",
'Hospital#3'="Hospital Number 3",
'Hospital#4'="The Other Hospital"
)
Kemudian buat fungsi 'labeller', dan dorong ke dalam panggilan facet_grid Anda:
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)
...
Ini menggunakan tingkat bingkai data untuk mengindeks daftar nama_rumah sakit, mengembalikan nilai daftar (nama yang benar).
Harap dicatat bahwa ini hanya berfungsi jika Anda hanya memiliki satu variabel faceting. Jika Anda memiliki dua sisi, maka fungsi labeller Anda harus mengembalikan vektor nama yang berbeda untuk setiap sisi. Anda dapat melakukan ini dengan sesuatu seperti:
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else {
return(facet2_names[value])
}
}
Di mana facet1_names
dan facet2_names
merupakan daftar nama yang ditentukan sebelumnya yang diindeks oleh nama indeks facet ('Hostpital # 1', dll.).
Sunting: Metode di atas gagal jika Anda meneruskan kombinasi variabel / nilai yang tidak diketahui labeller. Anda dapat menambahkan gagal-aman untuk variabel tidak dikenal seperti ini:
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))
}
}
Jawaban diadaptasi dari cara mengganti label strip.text di ggplot dengan facet dan margin = TRUE
edit: PERINGATAN : jika Anda menggunakan metode ini untuk facet oleh kolom karakter , Anda mungkin mendapatkan label yang salah. Lihat laporan bug ini . diperbaiki dalam versi terbaru ggplot2.
ggplot(transform(iris, Species = c("S", "Ve", "Vi")[as.numeric(Species)]), aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)