Вот решение, которое избегает редактирования ваших данных:
Скажем, ваш график огранен 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"
)
Затем создайте функцию labeller и вставьте ее в ваш вызов 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, возвращая значения списка (правильные имена).
Обратите внимание, что это работает, только если у вас есть только одна переменная фасетирования. Если у вас есть два аспекта, ваша функция-метка должна возвращать разные имена для каждого аспекта. Вы можете сделать это с чем-то вроде:
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))
}
}
Ответ адаптирован из того, как изменить метки strip.text в ggplot с помощью facet и margin = TRUE
edit: ПРЕДУПРЕЖДЕНИЕ : если вы используете этот метод для фасетирования столбца символов , возможно, вы получаете неправильные метки. Смотрите этот отчет об ошибке . исправлено в последних версиях ggplot2.
ggplot(transform(iris, Species = c("S", "Ve", "Vi")[as.numeric(Species)]), aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)