geom_path сгруппирован и путь упорядочен по категориальному фактору

#r #ggplot2 #pca #factominer

Вопрос:

Я ищу решение для упорядочения пути geom_path на основе определенного порядка, заданного коэффициентом.

Я работал с первыми двумя измерениями PCA. Используя library("factoextra") , и library("FactoMineR") я создаю свою фигуру с fviz_pca_ind() помощью .

 raa_male lt;- fviz_pca_ind(  pca.data,  fill.ind = male_raa.df$Season,  pointsize = male_raa.df$BRI,  pointshape = 21,  repel = TRUE )  

Данные распределены по отдельным лицам (показаны текстовыми метками).

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

Используя geom_path я хочу соединить точки одного и того же индивидуума, по порядку пути, в зависимости от сезона c(Autumn, Winter, Spring) . Однако у меня возникают трудности с этим

 male_raa.df$Season lt;- factor(male_raa.df$Season, levels = c("Autumn", "Winter", "Spring"))  raa_male    geom_path(  arrow = arrow(angle = 15, ends = "last", type = "closed"),  alpha = 0.2,  aes(group = male_raa.df$TagID)  )  

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

Упорядочение, установленное для коэффициента, не отображается в соответствии с упорядочением пути geom_path.

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

1. Я считаю geom_path , что используется порядок внешнего вида, а не порядок фактора, поэтому вам, возможно, придется сначала добавить шаг сортировки.

Ответ №1:

Вот небольшой пример, сравните оригинальную и отсортированную версию. geom_path упорядочивается на основе порядка отображения в данных, поэтому, если вы хотите, чтобы он отражал упорядоченный фактор, сначала отсортируйте по нему.

 df1 lt;- data.frame(x = 1:3,  y = c(1,2,1),  season = LETTERS[1:3]) df1$season = factor(df1$season, levels = c("B","C","A"))  library(ggplot2); library(dplyr) ggplot(df1, aes(x,y, label = season))    geom_path(arrow = arrow(angle = 15, ends = "last", type = "closed"))    geom_label()  

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

 ggplot(df1 %gt;% arrange(season), aes(x,y, label = season))    geom_path(arrow = arrow(angle = 15, ends = "last", type = "closed"),)    geom_label()  

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

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

1. Спасибо, Джон, это решение отлично работает