Đây là một giải pháp tránh chỉnh sửa dữ liệu của bạn:
Giả sử âm mưu của bạn được sắp xếp theo group
một phần của khung dữ liệu của bạn, có các mức control, test1, test2
, sau đó tạo một danh sách được đặt tên theo các giá trị đó:
hospital_names <- list(
'Hospital#1'="Some Hospital",
'Hospital#2'="Another Hospital",
'Hospital#3'="Hospital Number 3",
'Hospital#4'="The Other Hospital"
)
Sau đó tạo chức năng 'labeller' và đẩy nó vào lệnh gọi facet_grid của bạn:
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)
...
Điều này sử dụng các mức của khung dữ liệu để lập chỉ mục danh sách hospital_names, trả về các giá trị danh sách (tên chính xác).
Xin lưu ý rằng điều này chỉ hoạt động nếu bạn chỉ có một biến faceting. Nếu bạn có hai khía cạnh, thì hàm labeller của bạn cần trả về một vectơ tên khác nhau cho mỗi khía cạnh. Bạn có thể làm điều này với một cái gì đó như:
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else {
return(facet2_names[value])
}
}
Ở đâu facet1_names
và facet2_names
được danh sách các tên được lập chỉ mục bởi những cái tên chỉ số khía cạnh ( 'Hostpital # 1', vv) được xác định trước.
Chỉnh sửa: Phương pháp trên không thành công nếu bạn vượt qua kết hợp biến / giá trị mà người lao động không biết. Bạn có thể thêm lỗi không an toàn cho các biến không xác định như thế này:
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))
}
}
Trả lời được điều chỉnh từ cách thay đổi nhãn dải.text trong ggplot với khía cạnh và lề = TRUE
chỉnh sửa: CẢNH BÁO : nếu bạn đang sử dụng phương pháp này để khía cạnh bởi một cột ký tự , bạn có thể nhận được nhãn không chính xác. Xem báo cáo lỗi này . đã sửa trong các phiên bản gần đây của ggplot2.
ggplot(transform(iris, Species = c("S", "Ve", "Vi")[as.numeric(Species)]), aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)