如何按指定因子顺序控制geom_path路径的连接顺序?
问题原因
geom_path的连接规则是严格按照数据框的行顺序拼接同一分组的点,仅修改Season列的因子等级不会自动调整数据框的行顺序,因此不会改变路径连接逻辑。
解决步骤
- 先对数据框按「个体ID+季节」排序,保证每个个体的行顺序对应
Autumn→Winter→Spring的需求,可任选以下一种方法实现:- dplyr方案:
library(dplyr) # 先设置季节因子等级,再排序 male_raa.df$Season <- factor(male_raa.df$Season, levels = c("Autumn", "Winter", "Spring")) male_raa.df <- male_raa.df %>% arrange(TagID, Season)- 基础R方案:
male_raa.df$Season <- factor(male_raa.df$Season, levels = c("Autumn", "Winter", "Spring")) male_raa.df <- male_raa.df[order(male_raa.df$TagID, male_raa.df$Season), ] - 调整
geom_path的写法,明确指定数据和映射关系,避免变量映射错乱:raa_male + geom_path( data = male_raa.df, aes(x = Dim.1, y = Dim.2, group = TagID), arrow = arrow(angle = 15, ends = "last", type = "closed"), alpha = 0.2 )注:
fviz_pca_ind()生成的ggplot对象默认坐标列名为Dim.1(第一主成分)、Dim.2(第二主成分),若你自定义过列名可以替换为对应值。
验证方法
排序后可随机抽取一个个体的样本查看顺序:
# 随机抽一个TagID查看季节顺序 sample_id <- sample(male_raa.df$TagID, 1) male_raa.df[male_raa.df$TagID == sample_id, "Season"]
返回结果顺序应为Autumn、Winter、Spring即表示排序生效,绘图后路径就会按照指定顺序连接。
内容的提问来源于stack exchange,提问作者Benn Hanns
相关产品推荐
相关产品推荐

