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

