Поддерживать дискретные уровни масштаба в ggplot при применении отдельных слоев - PullRequest
0 голосов
/ 02 марта 2019

Применение нового geom_ изменяет существующие уровни факторов в ggplot.

Представьте себе построение матрицы корреляции с точками, обозначающими корреляции ниже диагонали, и надписями выше.

library(tidyverse)
library(magrittr)
library(broom)

t1 <- mtcars %>% 
  cor %>% 
  as_tibble %>%
  mutate(
    v1 = mtcars %>% names
    ) %>% 
  gather(
    v2, cor, -v1
  ) %>% 
  filter(
    cor != 1
  )

Этот объект (fl) - это желаемое расположение уровней факторов

fl <- mtcars %>% 
  factanal(factors = 1) %>% 
  tidy %>% 
  arrange(fl1) %>% 
  use_series(variable)

Настройка этого t1 объекта для построения

t1 %<>% 
  modify_at(
    1:2, 
    ~factor(., fl)
  ) %>% 
  mutate(
    v1_num = v1 %>% 
      as.numeric,
    v2_num = v2 %>% 
      as.numeric,
    lab = cor %>% 
      round(2) %>% 
      as.character 
    )

Затем нанесение первого объекта

p1 <- ggplot() +
  geom_point(
    aes(v1, v2, 
        color = cor, size = abs(cor)),
    data = t1 %>% 
      filter(
        v1_num <= v2_num
        )
    )

enter image description here

Это работает как нужно.Но попытка нанести метки выше горизонтали меняет уровни факторов

p1 + 
  geom_text(
    aes(v1, v2, label = lab),
    t1 %>% 
      filter(
        v1_num >= v2_num
      )
  )

возвращает

enter image description here

Как сохранить уровни поддержкис последующими geom_ с?

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