如何在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
相关产品推荐
相关产品推荐

