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

matplotlib绘制散点图c参数与x、y长度不匹配ValueError问题求助

Matplotlib散点图传入颜色列表报错问题解决

报错根因

plt.scatter()的color/c参数如果传入颜色列表,要求列表长度和散点总数量完全匹配。你当前有70120个(x,y)对的散点,仅传入2个颜色值,长度不匹配触发报错。

解决方案(按实际需求选择即可)

场景1:需要将散点分为两类,分别显示黄绿两种颜色

先根据你的分类规则,构造和散点数量一致的颜色列表再传入即可,示例按「Optical SOC值大于SAR SOC为绿色,反之为黄色」的规则实现:

import matplotlib.pyplot as plt
import pandas as pd

soc_data = pd.read_csv('research/featurespace/optical_sar.csv')
x = soc_data.SOCOptical
y = soc_data.SOCSAR

# 构造逐点颜色序列,可根据实际分类规则修改判断条件
point_colors = ['green' if xi > yi else 'yellow' for xi, yi in zip(x, y)]

plt.scatter(x, y, s=0.001, c=point_colors)
plt.title('2D Feature Space - SOC Optical v/s SOC SAR')
plt.xlabel('Optical Predicted SOC')
plt.ylabel('SAR Predicted SOC')
plt.show()

场景2:需要分别展示Optical、SAR两类SOC的数值分布

如果你是误以为散点图可以单独给x序列、y序列指定颜色,本质是要单独展示两个序列的分布,可以分开两次调用scatter绘制:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

soc_data = pd.read_csv('research/featurespace/optical_sar.csv')
x = soc_data.SOCOptical
y = soc_data.SOCSAR
# 生成索引作为公共横轴
idx = np.arange(len(x))

plt.scatter(idx, x, s=0.001, color='green', label='Optical SOC')
plt.scatter(idx, y, s=0.001, color='yellow', label='SAR SOC')

plt.title('SOC Value Distribution')
plt.xlabel('Sample Index')
plt.ylabel('Predicted SOC')
plt.legend()
plt.show()

场景3:需要散点呈现黄绿渐变效果

如果不需要明确分类,只是要颜色渐变效果,直接传入数值序列配合cmap配色即可:

plt.scatter(x, y, s=0.001, c=x, cmap='YlGn') # YlGn为内置黄绿渐变配色方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:36:05