如何自定义FactoExtra包中fviz_pca函数的点形状?
如何在FactoExtra的fviz_pca_biplot中自定义点形状?
你遇到的报错是因为直接叠加geom_point的方式不对——fviz_pca_biplot本身已经帮你生成了点图层,强行叠加新的点图层会和原有图层的映射逻辑冲突,而且直接把形状向量塞到aes()里也不符合ggplot的映射规则(形状应该映射到分组变量,而不是直接传固定向量)。
其实FactoExtra包已经提供了更简单的方式来自定义点形状,有两种常用方法:
方法1:直接用shape.ind参数指定
fviz_pca_biplot内置了shape.ind参数,可以直接传入自定义的形状向量,注意向量长度要和你的分组(PCADF$groups)的水平数一致。
首先确保你的分组变量是因子类型(如果不是先转换):
PCADF$groups <- as.factor(PCADF$groups)
然后修改你的绘图代码,添加shape.ind参数:
fviz_pca_biplot(PCA, axes = c(1, 2), label="var", col.var = "black", geom = "point", pointsize = 2, col.ind=PCADF$groups, addEllipses = TRUE, ellipse.level = 0.95, ellipse.type ="confidence", palette = "aaas", shape.ind = c(19,20,21,22,23,24)) + theme_minimal()
方法2:用scale_shape_manual手动映射(更灵活)
如果你需要更精准地控制每个分组对应的形状(比如按分组名称指定),可以用ggplot的scale_shape_manual函数来设置,这种方式兼容性更强:
fviz_pca_biplot(PCA, axes = c(1, 2), label="var", col.var = "black", geom = "point", pointsize = 2, col.ind=PCADF$groups, addEllipses = TRUE, ellipse.level = 0.95, ellipse.type ="confidence", palette = "aaas") + scale_shape_manual(values = c(19,20,21,22,23,24)) + # 按分组顺序指定形状 theme_minimal()
如果你的分组有明确的名称,还可以这样精准对应:
scale_shape_manual(values = c( "GroupA" = 19, "GroupB" = 20, "GroupC" = 21, "GroupD" = 22, "GroupE" = 23, "GroupF" = 24 ))
这两种方法都能完美解决你自定义点形状的需求,而且不会出现图层冲突的报错。
内容的提问来源于stack exchange,提问作者Juliana Gonçalves
相关产品推荐
相关产品推荐

