如何在R语言的LDA图上添加locationData对应的凸包图层
解决方案
要在LDA图上叠加locationData对应的凸包图层,只需把位置信息纳入数据框,并新增一个针对location的stat_chull图层即可,以下是修改后的完整代码:
library(MASS) library(data.table) library(ggplot2) myDF <- iris locationData <- "UK" myDF <- cbind(myDF, locationData) myDF[30:45,6] <- "France" myDF[105:145,6] <- "Japan" myDF[146:150,6] <- "France" Species <- myDF$Species data4LDA <- lda(Species~. ,myDF[1:4] ) # 执行LDA LD1 <- predict(data4LDA)$x[,1] LD2 <- predict(data4LDA)$x[,2] # 关键:把location字段加入数据框 dt <- data.table(Species, LD1, LD2, location = myDF$locationData) dt[order(dt$Species),] LDAplot <- ggplot(dt,aes(x=LD1,y=LD2)) + # 先画location的凸包(底层,调低透明度避免遮挡数据点) stat_chull(aes(fill = location, color = location), geom = "polygon", alpha = 0.08) + # 绘制数据点 geom_point(size = 2, aes(color=Species)) + # 再画Species的凸包 stat_chull(aes(color = Species, fill = Species), geom = "polygon", alpha = 0.1) LDAplot
关键修改说明:
- 补充位置数据:创建
dt时新增location = myDF$locationData,让ggplot能读取位置分组信息。 - 调整图层顺序:先绘制
location的凸包(设置更低的alpha值),再画数据点和Species的凸包,避免凸包遮挡核心数据点。 - 区分美学映射:通过
aes分别为location和Species绑定颜色/填充映射,清晰区分两类凸包的分组逻辑。
如果想让location凸包更突出,可以调高alpha值(比如0.15),或者把location凸包放在数据点之后(但会遮挡部分点,按需选择即可)。
内容的提问来源于stack exchange,提问作者AsiJapan
相关产品推荐
相关产品推荐

