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

如何在Python中用自定义4种颜色(含金色)绘制散点图

解决方案

要实现用红色、绿色、蓝色、金色四种颜色的权重混合绘制散点图,核心是将四权重矩阵转换为RGB颜色值——因为matplotlib会把4列的颜色数组默认解析为RGBA(第四列是透明度),无法直接用第四列表示第四种颜色的权重。具体步骤如下:

1. 定义基础颜色与权重矩阵

首先确定四种目标颜色的标准RGB值(金色采用常见的#FFD700转换为0-1范围的RGB),同时准备你的权重矩阵:

import numpy as np
import matplotlib.pyplot as plt

# 定义四种基础颜色的RGB值(0-1范围)
base_colors = np.array([
    [1.0, 0.0, 0.0],    # 红色
    [0.0, 1.0, 0.0],    # 绿色
    [0.0, 0.0, 1.0],    # 蓝色
    [1.0, 0.8627, 0.0]  # 金色(对应十六进制#FFD700)
])

# 你的权重矩阵:每行对应一个点的四个颜色权重
weights = np.array([
    [0.9, 0.1, 0.1, 0.1],
    [0.1, 0.9, 0.1, 0.1],
    [0.1, 0.1, 0.9, 0.1],
    [0.1, 0.1, 0.1, 0.9]
])

2. 归一化权重(可选但推荐)

如果权重每行的总和不为1,需要先归一化,确保颜色混合比例正确:

# 对每行权重归一化,保证总和为1
normalized_weights = weights / weights.sum(axis=1, keepdims=True)

3. 计算最终RGB颜色

通过矩阵乘法,将权重与基础颜色混合,得到每个点的RGB值:

# 计算每个点的最终RGB颜色
final_colors = normalized_weights @ base_colors

4. 绘制散点图

将计算好的RGB颜色传入scatter的c参数即可:

# 准备数据
x = np.array([1,2])
y = np.array([[2,3],[1,4]])

# 绘制散点图
plt.scatter(np.repeat(x, y.shape[1]), y.flat, s=100, c=final_colors)
plt.show()

关键说明

  • 这种方法本质是线性颜色混合:每个点的颜色是四种基础颜色按权重比例叠加的结果,完全符合你“第一列红、第二列绿、第三列蓝、第四列金”的需求。
  • 若你的权重矩阵每行总和已经是1,可以跳过归一化步骤,直接计算final_colors = weights @ base_colors。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:05:12