Facet_wrap: условное форматирование на основе label_value? - PullRequest
0 голосов
/ 23 октября 2018

Для некоторых из моих диаграмм я хотел бы изменить форматирование чисел на оси x для каждого фасета условно на метке фасета, например, на основе порядка величины (например, k, M, B и т. Д.).

В приведенном ниже примере с данными mtcars я бы хотел, чтобы фасет с gear==3 сохранил исходное число, с gear==4 создайте формат "k" и с gear==5 an "Mформат.Так что два последних будут выражены в тысячах и миллионах соответственно.

Можно ли использовать label_value из labeller для условного применения формата / функции?

library(tidyverse)

d<-mtcars%>%mutate(mpg2=ifelse(gear==5,mpg*1000000,mpg))

ggplot(d) +
      geom_point(aes(mpg2, cyl)) +
      facet_wrap(~ gear, scales = "free")+
      scale_x_continuous(name = NULL,  labels = function(l) {
          return(paste0(round(l / 1000, 1), "K"))
      })

1 Ответ

0 голосов
/ 23 октября 2018

Если вы хотите, чтобы форматирование шкалы изменялось в зависимости от значения, вот способ использования 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)
})

enter image description here

Я думаю, что это работает довольно хорошо.

Если вам требуется особый контроль над маркировкой по фасету, вы можете подумать о том, чтобы подделать текст оси фасета с помощью geom_text(aes(label = your_preferred_label)) и отключить вырезку в coord_, чтобы вы могли поместить текст за пределы диапазона печати, или (проще говоря) объединение графиков с patchwork или cowplot.Я не знаю, как заставить сам лейбл знать информацию о фасетах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...