Если вы хотите, чтобы форматирование шкалы изменялось в зависимости от значения, вот способ использования dplyr::case_when
.(Однако я не знаю, как по-разному показывать одни и те же числа в зависимости от фасета.)
Изменить, чтобы показать более широкий диапазон, например:
d <- mtcars %>% mutate(mpg2 = mpg ^ gear / carb)
ggplot(d) +
geom_point(aes(mpg2, cyl)) +
facet_wrap(~ gear, scales = "free")+
scale_x_continuous(name = NULL, trans = "log2", labels = function(l) {
scaled = case_when(l >= 1E6 ~ paste0(formatC(l/1E6, digits = 0, big.mark = ",", format = "f"), "M"),
l >= 1E3 ~ paste0(formatC(l/1E3, digits = 0, big.mark = ",", format = "f"), "K"),
TRUE ~ paste0(l))
return(scaled)
})
Я думаю, что это работает довольно хорошо.
Если вам требуется особый контроль над маркировкой по фасету, вы можете подумать о том, чтобы подделать текст оси фасета с помощью geom_text(aes(label = your_preferred_label))
и отключить вырезку в coord_
, чтобы вы могли поместить текст за пределы диапазона печати, или (проще говоря) объединение графиков с patchwork
или cowplot
.Я не знаю, как заставить сам лейбл знать информацию о фасетах.