使用EMcluster包plotmd绘制带标签色平行坐标图,缺失图例求助
我懂你这个痛点——EMcluster里的plotmd画平行坐标图时确实没自带图例功能,没法直接对应颜色和label的关系,这确实挺闹心的。下面给你几个实用的解决办法,从补加图例到换用更顺手的工具都有:
方法1:给plotmd的图手动补加图例
因为plotmd是基于R基础绘图系统的,所以我们可以用基础绘图的legend()函数手动添加图例,关键是先搞清楚plotmd的颜色分配逻辑:
首先先构造你的数据集并绘图:
# 构造数据集 hr_data <- data.frame( HR_1 = c(0.1, 0.04, 1.1), HR_2 = c(0.05, 0.15, 2.05), HR_3 = c(1.5, 1.0, 2.5), HR_4 = c(1.6, 1.6, 1.6), label = c(1, 1, 0) ) library(EMcluster) # 提取特征列和label features <- hr_data[, paste0("HR_", 1:4)] labels <- hr_data$label # 先绘制平行坐标图 plotmd(features, class = labels, type = "coord") # 确定颜色映射:plotmd默认用palette()里的颜色,按label的类别分配 unique_labels <- unique(labels) # 获取每个label对应的颜色索引 color_idx <- as.integer(factor(labels)) # 提取用到的颜色 used_colors <- palette()[unique(color_idx)] # 添加图例,位置可以自己调整(比如topright、bottomleft等) legend("topright", legend = paste("Label", unique_labels), col = used_colors, lty = 1, # 和plotmd的线条类型保持一致 cex = 0.8, title = "Label Category")
这样就能在图上看到颜色和label的对应关系了。
方法2:换用GGally包的ggparcoord(更省心的ggplot2风格)
如果不想手动折腾图例,GGally包的ggparcoord是专门做平行坐标图的工具,原生支持图例,还能借助ggplot2的语法轻松定制样式:
library(GGally) library(ggplot2) ggparcoord(hr_data, columns = 1:4, # 指定HR_1到HR_4作为平行坐标轴 groupColumn = "label", # 按label分组配色 showPoints = TRUE, # 可选:显示每个数据点 scale = "uniminmax") + # 可选:把每个变量缩放到0-1范围,方便对比 scale_color_discrete(name = "Label") + # 自定义图例标题 labs(title = "Parallel Coordinates Plot by Label", y = "Value", x = "HR Variables") + theme_minimal()
这个方法出来的图自带清晰的图例,还能随意调整颜色、线条粗细、主题风格,非常灵活。
方法3:用基础绘图手动绘制(完全自定义)
如果你想完全掌控绘图的每一个细节,可以自己写代码绘制平行坐标图,这样图例也能完全按你的需求来:
# 设置坐标轴位置和变量名 n_vars <- 4 x_pos <- 1:n_vars var_names <- paste0("HR_", 1:n_vars) # 初始化绘图区域 plot(NULL, xlim = c(0.5, n_vars + 0.5), ylim = range(hr_data[, 1:4]), xlab = "HR Variables", ylab = "Value", main = "Parallel Coordinates Plot") # 添加垂直参考线 for (x in x_pos) { abline(v = x, lty = 2, col = "gray80") } # 自定义颜色映射 color_map <- c("0" = "#2E86AB", "1" = "#F24C4C") # 绘制每条数据线 for (i in 1:nrow(hr_data)) { y_vals <- unlist(hr_data[i, 1:4]) lines(x_pos, y_vals, col = color_map[as.character(hr_data$label[i])], lwd = 1.5) } # 添加坐标轴标签 axis(1, at = x_pos, labels = var_names) # 添加图例 legend("topright", legend = names(color_map), col = unname(color_map), lty = 1, lwd = 1.5, title = "Label")
这个方法可以让你随心所欲调整颜色、线条样式、参考线等,完全定制你的图表。
内容的提问来源于stack exchange,提问作者costa_10
相关产品推荐
相关产品推荐

