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

如何用matplotlib按亮度排列并绘制颜色集合

用Matplotlib绘制垂直方形的亮度排序颜色图

核心实现步骤

假设你已经实现了calculate_luminance(color)函数(输入颜色值返回对应亮度),直接按以下步骤实现:

  1. 对颜色按亮度排序:用你的亮度函数作为排序依据,调整升序/降序满足需求
  2. 计算方形网格布局:通过颜色总数的平方根取整,让行列数尽可能接近,保证整体呈方形
  3. 绘制无轴颜色块:用Matplotlib子图绘制每个颜色块,去掉所有坐标轴元素,调整间距让布局紧凑

完整代码示例

import matplotlib.pyplot as plt
import math

# 替换成你已有的亮度计算函数
def calculate_luminance(color):
    # 示例:处理十六进制/RGB格式,返回WCAG标准亮度值
    if isinstance(color, str):
        color = color.lstrip('#')
        r, g, b = [int(color[i:i+2], 16)/255 for i in (0, 2, 4)]
    else:
        r, g, b = [x/255 for x in color]
    return 0.2126 * r + 0.7152 * g + 0.0722 * b

# 替换成你的目标颜色集合
color_list = [
    "#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF",
    "#800000", "#008000", "#000080", "#808000", "#800080", "#008080",
    "#C0C0C0", "#808080", "#000000", "#FFFFFF"
]

# 按亮度升序排序(reverse=True可改为降序)
sorted_colors = sorted(color_list, key=calculate_luminance)

# 计算方形网格的行列数
total_colors = len(sorted_colors)
grid_dim = int(math.ceil(math.sqrt(total_colors)))
rows, cols = grid_dim, grid_dim

# 创建方形画布
fig, axes = plt.subplots(rows, cols, figsize=(8, 8))
axes = axes.flatten()  # 将二维子图数组转为一维,方便遍历

# 逐个绘制颜色块
for ax, color in zip(axes, sorted_colors):
    ax.set_facecolor(color)
    # 移除所有坐标轴元素
    ax.set_xticks([])
    ax.set_yticks([])
    for spine in ax.spines.values():
        spine.set_visible(False)

# 隐藏未使用的子图(当颜色数不是完全平方数时)
for ax in axes[total_colors:]:
    ax.axis('off')

# 调整子图间距,让颜色块紧密排列
plt.subplots_adjust(wspace=0.05, hspace=0.05)
plt.show()

关键细节说明

  • 方形布局控制:通过grid_dim = int(math.ceil(math.sqrt(total_colors)))确保行列数尽可能相等,配合figsize=(8,8)让画布保持方形
  • 无干扰展示:移除坐标轴刻度、边框,避免视觉干扰
  • 间距调整:wspace和hspace参数控制子图间的水平/垂直间距,可根据需求微调数值
  • 排序方向:修改sorted函数的reverse参数,可切换颜色从亮到暗或暗到亮的排列顺序

内容的提问来源于stack exchange,提问作者Aleks K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:12:16