如何在FactoExtra的fviz_mfa_ind中按不同分组设点形状与颜色?
在FactoExtra中用fviz_mfa_ind实现个体点双分组(颜色+形状)可视化
问题描述
在R语言的FactoExtra包中,能否通过fviz_mfa_ind()实现以下需求:
- 按一个分组变量设置个体点的形状
- 按另一个分组变量设置个体点的颜色
当前使用habillage参数可按指定分组为点着色,但无法在主函数内直接叠加另一分组变量控制形状的逻辑。同事通过叠加geom_point()的方式实现了需求,但希望找到更简洁的原生参数用法。
解决方案
方法1:利用fviz_mfa_ind原生参数实现(更简洁)
核心是关闭habillage的自动分组,直接通过col.ind和shape.ind分别指定颜色、形状的分组变量,再配合手动尺度调整样式:
# 假设分组变量来自原始数据框data,data$Label控制颜色,data$Soil控制形状 fviz_mfa_ind(res.famd, habillage = "none", # 关闭自动着色/分组 col.ind = data$Label, # 指定颜色分组变量 shape.ind = data$Soil, # 指定形状分组变量 addEllipses = TRUE, ellipse.type = "confidence", repel = TRUE) + scale_color_manual(name = "Label", values = c("red", "blue", "green")) + # 自定义颜色映射 scale_shape_manual(name = "Soil", values = c(15,17,18,19)) # 自定义形状映射
注意:直接从原始数据框提取分组变量比从
res.famd$call中嵌套索引更清晰,也能避免因对象结构变化导致的错误。
方法2:优化叠加geom_point的写法
如果偏好图层叠加的方式,可以简化原代码的变量提取逻辑,同时关闭habillage避免重复绘制点:
fviz_mfa_ind(res.famd, habillage = "none", # 关闭默认点绘制,避免叠加后点重叠 addEllipses = TRUE, ellipse.type = "confidence", repel = TRUE) + geom_point(aes(color = data$Label, shape = data$Soil), size = 3) + scale_color_manual(name = "Label", values = c("red", "blue", "green")) + scale_shape_manual(name = "Soil", values = c(15,17,18,19))
内容的提问来源于stack exchange,提问作者c_j
相关产品推荐
相关产品推荐

