Метод упорядочения групп на линейном графике ggplot

#r #ggplot2

#r #ggplot2

Вопрос:

Я создал график со следующим кодом:

 df %>% 
  mutate(vars = factor(vars, levels = reord)) %>% 
  ggplot(aes(x = EI1, y = vars, group = groups))   
    geom_line(aes(color=groups))   
    geom_point()  
    xlab("EI1 (Expected Influence with Neighbor)")  
    ylab("Variables")
  

Результат:

введите описание изображения здесь

В то время как группа ei1_other находится в порядке убывания по x, точки ei1_gun упорядочены по переменным. Я бы хотел, чтобы обе группы следовали одному и тому же порядку, так что ei1_gun и ei1_other оба начинаются с лекарств, а затем спускаются в порядке переменных, а не убывают по порядку значений x.

Комментарии:

1. Пожалуйста, не могли бы вы поделиться своим df ? Существует множество вариантов решения вашей проблемы, но без данных мы не сможем воспроизвести вашу проблему.

2. Я прошу прощения. Я довольно новичок в SO, и я не думал добавлять некоторые образцы данных. Спасибо, что дали мне знать, и я сделаю это в следующий раз. @stefan предоставил решение ниже. Спасибо за ваши усилия.

Ответ №1:

Проблема в том, что порядок, в котором geom_line соединяются точки, определяется значением на оси x. Чтобы решить эту проблему, просто поменяйте x местами и y и используйте coord_flip .

Поскольку образец набора данных не был предоставлен, я использую пример набора данных, основанный на mtcars , чтобы проиллюстрировать проблему и решение. В моем примере данные make — это ваши vars , value ваши EI1 и name ваши groups :

 library(ggplot2)
library(dplyr)
library(tidyr)
library(forcats)

example_data <- mtcars %>%
  mutate(make = row.names(.)) %>%
  select(make, hp, mpg) %>% 
  mutate(make = fct_reorder(make, hp)) %>% 
  pivot_longer(-make)
  

make Включение x и value выключение отображения y приводит к неупорядоченному линейному графику, как в вашем примере. Причина в том, что порядок, в котором точки соединяются, определяется value :

 example_data %>% 
  ggplot(aes(x = value, y = make, color = name, group = name))   
  geom_line()   
  geom_point()  
  xlab("EI1 (Expected Influence with Neighbor)")  
  ylab("Variables")
  

Напротив, Замена x и y , т. Е. Отображение make x и value y использование coord_flip , дает хороший линейный график с упорядочением, поскольку порядок, в котором соединяются точки, теперь определяется make (конечно, мы также должны поменять xlab местами и ylab ):

 example_data %>% 
  ggplot(aes(x = make, y = value, color = name, group = name))   
  geom_line()   
  geom_point()  
  coord_flip()  
  ylab("EI1 (Expected Influence with Neighbor)")  
  xlab("Variables")
  

Комментарии:

1. Спасибо @stefan. Это помогло мне пройти 99% пути. Мне просто нужно было добавить обратно в строку mutate, mutate(vars = factor(vars, levels = reord)) и это привело меня к этому. Я прошу прощения за то, что не предоставил код. Я довольно новичок в SO и ценю советы и усилия.