You need to enable JavaScript to run this app. R语言中KNN聚类可视化如何控制簇颜色与符号类型
优惠活动
大模型
产品
解决方案
定价
更多

R语言中KNN聚类可视化如何控制簇颜色与符号类型

R语言KNN聚类可视化:两类簇颜色、符号的自定义实现

核心调整逻辑

原有KNN决策边界的绘图流程分为网格预测区填充、原始样本叠加两个核心环节,所有自定义样式的修改都不需要调整核心的KNN预测逻辑,仅需在两个绘图步骤中传入对应样式参数即可。

具体操作步骤

  • 自定义决策区域填充色
    原代码中绘制网格预测结果时,col参数默认使用系统默认色板,二分类场景下直接传入提前选好的两个颜色组成的向量即可完成替换。比如传入c("#FADBD8", "#D6EAF8"),即可将两类对应的决策填充区域换成浅红、浅蓝的自定义色,搭配alpha = 0.3参数可调整填充透明度,避免背景色过艳遮挡样本点。
  • 自定义样本点的符号类型
    原代码中叠加样本时默认统一使用实心圆点,如需按类别区分符号,可提前基于分类标签生成和样本顺序一一对应的符号向量,直接传给points()函数的pch参数即可。比如二分类场景下:
    # 示例:第一类用实心圆(pch=16),第二类用实心三角(pch=17)
    custom_pch <- ifelse(train_label == levels(train_label)[1], 16, 17)
    
    R内置的pch参数支持0-25共26种符号类型,可根据需求直接替换数值。
  • 自定义样本点的展示颜色
    和符号自定义逻辑一致,提前基于分类标签生成和样本顺序匹配的颜色向量,传给points()函数的col参数即可。建议样本点颜色和对应类别的决策填充色保持同色系但加深饱和度,保证视觉区分度,比如填充色用浅粉、浅蓝,对应样本点用深酒红、深蓝。

可直接套用的代码片段

以下代码可直接适配原有KNN绘图逻辑,替换掉默认样式部分即可:

# 生成绘图网格(保留原有KNN预测逻辑无需修改)
grid <- expand.grid(
  x = seq(min(train_data[,1]), max(train_data[,1]), length.out = 200),
  y = seq(min(train_data[,2]), max(train_data[,2]), length.out = 200)
)
grid_pred <- knn(train = train_data, test = grid, cl = train_label, k = 3)

# 自定义样式配置
style_config <- list(
  fill_col = c("#FFE4E1", "#E8F8F5"), # 两类决策区填充色
  point_pch = c(16, 4), # 两类样本符号:实心圆、叉号
  point_col = c("#C0392B", "#148F77") # 两类样本点颜色
)

# 绘图
plot(0, type = "n", xlim = range(grid$x), ylim = range(grid$y), xlab = "特征1", ylab = "特征2")
points(grid, col = style_config$fill_col[grid_pred], pch = ".", cex = 2)
points(train_data, pch = style_config$point_pch[train_label], col = style_config$point_col[train_label], cex = 1.2)
# 补充图例
legend("topright", legend = levels(train_label), pch = style_config$point_pch, col = style_config$point_col, bty = "n")

注意事项

  • 所有自定义样式向量的顺序,必须和分类因子的levels顺序严格对齐,避免出现颜色、符号和类别错配的问题,调整完成后可先单独绘制样本点部分,验证映射关系正确后再叠加决策边界。
  • 如需调整符号大小,可在points()函数中修改cex参数的数值即可。

内容的提问来源于stack exchange,提问作者Deyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 08:03:05