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

如何解决Matplotlib中colormap引发的ValueError错误?

错误成因及解决方法

错误成因

  • plt.plot()的c参数不支持直接传入纯数值数组作为颜色值。该参数仅接受合法的单一颜色表示(如'red'、'#FF0000'),或配合cmap时需先完成数值到颜色空间的映射,但plot本身不具备自动映射的能力。
  • 直接调用plt.colorbar()无法找到对应的颜色映射对象,因为plot生成的线条对象不属于ScalarMappable类型,无法直接绑定颜色条。

解决方法

方法一:改用plt.scatter()(推荐)

scatter原生支持为每个点设置独立颜色,且能自动生成颜色映射,配合colorbar使用更便捷:

import numpy as np
import matplotlib.pyplot as plt

t = np.array(range(0, 10))
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])
colormap = t

def DrawGraph():
    plt.figure(figsize=(20,6))
    # 使用scatter设置点大小、颜色数组、标记样式及颜色映射
    scatter = plt.scatter(t, y, s=50, c=colormap, marker=">", cmap='viridis')
    plt.colorbar(scatter)  # 绑定scatter对象生成颜色条
    plt.show()

DrawGraph()

方法二:保留plt.plot(),手动完成颜色映射

若坚持使用plot,需先通过颜色映射器将数值数组转换为实际颜色值:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable

t = np.array(range(0, 10))
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])
colormap = t

def DrawGraph():
    plt.figure(figsize=(20,6))
    # 创建归一化器和颜色映射
    norm = plt.Normalize(colormap.min(), colormap.max())
    cmap = plt.get_cmap('viridis')
    # 将数值数组转换为颜色数组
    colors = cmap(norm(colormap))
    
    # 逐个绘制带颜色的标记点
    for x, y_val, color in zip(t, y, colors):
        plt.plot(x, y_val, marker=">", markersize=10, color=color)
    
    # 手动创建ScalarMappable对象以生成颜色条
    sm = ScalarMappable(norm=norm, cmap=cmap)
    sm.set_array([])
    plt.colorbar(sm)
    plt.show()

DrawGraph()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 23:02:13