R语言中无索引嵌套列表的带自动配色折线图绘制方法
数据预处理
首先将嵌套列表转换为绘图用矩阵,每列对应一个子列表、每行对应一个固定位置的元素序列:
# 合并列表中的矩阵为14行3列的绘图矩阵 eig_mat <- do.call(cbind, eig_inter_list) # 自动获取参数,无需硬编码 n_line <- nrow(eig_mat) # 折线总数量 n_x <- ncol(eig_mat) # x轴刻度总数量
基础R绘图方案
# 加载配色包,如未安装先运行 install.packages("viridis") library(viridis) # 自动生成适配折线数量的区分度配色 line_colors <- viridis(n_line) # 可选:固定前两位颜色为红、蓝,匹配需求 # line_colors[1:2] <- c("red", "blue") # 初始化空白画布 plot(1, type = "n", xlim = c(1, n_x), ylim = range(eig_mat), xaxt = "n", xlab = "子列表序号", ylab = "数值") # 设置x轴刻度 axis(side = 1, at = 1:n_x, labels = paste0("子列表", 1:n_x)) # 循环绘制所有折线 for (i in 1:n_line) { lines(x = 1:n_x, y = eig_mat[i, ], col = line_colors[i], lwd = 1.5) } # 折线数量过多时可注释掉下方图例代码 legend("topright", legend = paste0("序列", 1:n_line), col = line_colors, lty = 1, cex = 0.7)
ggplot2绘图方案
适合需要后续调整样式的场景:
# 加载依赖包,未安装可先运行 install.packages(c("ggplot2", "dplyr", "tidyr")) library(ggplot2) library(dplyr) library(tidyr) # 转换为长格式数据 plot_df <- as.data.frame(eig_mat) %>% mutate(line_id = factor(1:n_line)) %>% pivot_longer(cols = -line_id, names_to = "x_idx", values_to = "val") %>% mutate(x_idx = as.integer(gsub("V", "", x_idx))) ggplot(plot_df, aes(x = x_idx, y = val, group = line_id, color = line_id)) + geom_line(linewidth = 1) + # 自定义x轴刻度 scale_x_continuous(breaks = 1:n_x, labels = paste0("子列表", 1:n_x)) + # 自动适配配色 scale_color_viridis_d() + labs(x = "子列表序号", y = "数值") + theme_bw()
适配规则说明
- 所有代码均无硬编码参数,输入数据的子列表数量、每个子列表的元素数量变化时,代码可自动适配,无需修改核心逻辑
- 配色默认使用色弱友好、区分度高的viridis色板,最多可支持上百种不同颜色的生成;如果折线数量极大,可替换为
hcl.colors(n_line, palette = "Cold")生成更多区分度高的颜色
内容的提问来源于stack exchange,提问作者statwoman
相关产品推荐
相关产品推荐

