You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中按TYPE分组可视化数据框列表中的HEX颜色

按TYPE分组可视化颜色列表的实现方案

核心思路

先把嵌套在数据框里的颜色列表拆分为扁平化结构,再按TYPE分组,为每个分组生成独立的颜色展示图——用色块直观呈现颜色,下方标注对应的HEX码,确保清晰易读。

实现步骤及代码

1. 加载依赖包

需要用到数据处理和可视化的基础包:

library(dplyr)
library(tidyr)
library(ggplot2)
library(purrr)
library(scales) # 用于自动判断文字颜色对比度

2. 数据预处理

将嵌套的颜色列表展开,保留TYPE关联关系,可选去重(避免同一TYPE下重复展示相同颜色):

# 展开颜色列表,生成扁平化数据
flat_test <- test %>%
  unnest(cols = cols) %>%
  # 可选:按TYPE去重,剔除重复颜色
  distinct(TYPE, cols, .keep_all = TRUE) %>%
  # 为每个颜色添加序号,保证展示顺序稳定
  group_by(TYPE) %>%
  mutate(color_id = row_number()) %>%
  ungroup()

3. 定义可视化函数

写一个通用函数,输入单个TYPE的颜色数据,生成带HEX标注的颜色展示图:

plot_colors <- function(data) {
  type_name <- unique(data$TYPE)
  ggplot(data, aes(x = factor(color_id), y = 1, fill = cols)) +
    # 绘制纯色块
    geom_tile(height = 1) +
    # 标注HEX码,自动适配文字颜色(深色块用白字,浅色块用黑字)
    geom_text(aes(label = cols), 
              color = ifelse(luminance(data$cols) < 0.5, "white", "black"), 
              vjust = 1.5, size = 4) +
    # 精简主题,去掉冗余元素
    theme_minimal() +
    theme(
      axis.title = element_blank(),
      axis.text.y = element_blank(),
      axis.ticks = element_blank(),
      panel.grid = element_blank(),
      legend.position = "none",
      plot.title = element_text(hjust = 0.5, size = 14, face = "bold")
    ) +
    scale_fill_identity() +
    labs(title = paste("颜色集合 -", type_name))
}

4. 批量生成并保存/展示图形

按TYPE拆分数据,批量生成每个分组的图,可选择直接展示或保存到本地:

# 按TYPE拆分数据集
type_groups <- flat_test %>% group_split(TYPE)

# 批量展示所有分组的颜色图
walk(type_groups, ~print(plot_colors(.x)))

# 可选:批量保存到本地(按TYPE命名文件)
walk(type_groups, function(data) {
  type_name <- unique(data$TYPE)
  ggsave(paste0("color_plot_", type_name, ".png"), 
         plot_colors(data), 
         width = 8, height = 3, dpi = 300)
})

方案优势

  • 适配大规模数据:unnest和group_split都是tidyverse的高效操作,处理大数据集无压力
  • 灵活性强:可根据需求调整是否去重、色块尺寸、文字样式等细节
  • 可读性佳:自动适配文字与色块的对比度,避免因颜色相近导致的文字看不清问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:40:22