Постройте график с коэффициентом, который будет упорядочен на основе алфавита c порядка другой переменной, используя tidyverse - PullRequest
0 голосов
/ 08 мая 2020

рассмотрим набор данных ниже, в котором есть переменная Nbr, которая является фактором с неупорядоченными уровнями. Порядок должен соответствовать алфавитному порядку вектора char в наборе данных. Я поискал в Интернете аналогичный случай, когда вы хотите построить график, упорядочивающий фактор на основе другого вектора, и нашел многие, которые используют числовые векторы, но не строковые векторы, а не в алфавитном порядке, как в этом вопросе. Я не нашел решения в разделе факторов книги «R for Data Science» (он же R4DS ).

MWE

df <- structure(list(Vis = structure(c(1L, 1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 10L, 12L, 12L, 13L, 13L, 1L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 10L, 12L, 12L, 13L, 13L, 1L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 10L, 11L, 11L, 1L, 1L, 2L, 3L, 
4L, 5L, 6L, 7L, 8L, 9L, 10L, 10L, 11L, 11L, 1L, 1L, 2L, 3L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 10L, 12L, 12L, 13L, 13L, 1L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 10L, 11L, 11L, 1L, 1L, 2L, 3L, 
4L, 5L, 6L, 7L, 8L, 9L, 10L, 10L, 12L, 12L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"
), class = "factor"), char = c("Fro", "Fro", "Fro", "Fro", "Fro", 
"Fro", "Fro", "Fro", "Fro", "Fro", "Fro", "Fro", "Fro", "Fro", 
"Fro", "Fro", "Gae", "Gae", "Gae", "Gae", "Gae", "Gae", "Gae", 
"Gae", "Gae", "Gae", "Gae", "Gae", "Gae", "Gae", "Gae", "Gae", 
"Ada", "Ada", "Ada", "Ada", "Ada", "Ada", "Ada", "Ada", "Ada", 
"Ada", "Ada", "Ada", "Ada", "Ada", "Bal", "Bal", "Bal", "Bal", 
"Bal", "Bal", "Bal", "Bal", "Bal", "Bal", "Bal", "Bal", "Bal", 
"Bal", "Ebe", "Ebe", "Ebe", "Ebe", "Ebe", "Ebe", "Ebe", "Ebe", 
"Ebe", "Ebe", "Ebe", "Ebe", "Ebe", "Ebe", "Ebe", "Ebe", "Dei", 
"Dei", "Dei", "Dei", "Dei", "Dei", "Dei", "Dei", "Dei", "Dei", 
"Dei", "Dei", "Dei", "Dei", "Geb", "Geb", "Geb", "Geb", "Geb", 
"Geb", "Geb", "Geb", "Geb", "Geb", "Geb", "Geb", "Geb", "Geb"
), Nbr = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L), .Label = c("5", 
"6", "1", "2", "4", "3", "7"), class = "factor")), row.names = c(NA, 
104L), class = "data.frame")

Код

ggplot() +
  geom_raster(aes(Vis, Nbr), data = df)

Участок

enter image description here

levels(df$Nbr)
[1] "5" "6" "1" "2" "4" "3" "7"

Вопрос

Как упорядочить коэффициент оси Y (Nbr) на основе алфавитного порядка вектора char с помощью tidyverse?

1 Ответ

0 голосов
/ 09 мая 2020

Код

library(tidyverse)
dfplot <- df %>%
  dplyr::arrange(desc(char))

ggplot() +
  geom_raster(aes(Vis, forcats::fct_inorder(Nbr)), data = dfplot)

Вывод

enter image description here

Подсказки к решению

есть огромный потенциал объединения инструмента dplyr::arrange() с forcats::fct_inorder() для получения любых упорядоченных уровней, которые вам нравятся. Первый будет выполнять сортировку / упорядочивание / упорядочение фактора для вас на основе другой переменной (ов) в кадре данных, но последний сохранит этот упорядоченный порядок внутри вашего ggplot() графика. Может быть поэтому он называется [fct] _ [in] [order] () .

Ссылка

Пакет forcats Хэдли Уикхэм.

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