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

如何基于数组V为Matplotlib绘制的6个箭头渲染对应颜色?

问题分析与修正

你的代码存在两个核心问题导致箭头全黑:

  1. 循环中重复绘制所有6个箭头,且始终使用固定的黑色(fc='k'、ec='k'),没有将计算出的colorVal应用到箭头上
  2. 颜色条在循环内重复创建,属于冗余操作

下面是修正后的代码,将每个箭头与数组V中的值一一对应,实现渐变颜色渲染:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.colors as colors
from matplotlib import cm

# 数值数组,对应6个箭头的颜色权重
V = np.array([[10], [20], [30], [40], [50], [60]])

# 初始化颜色映射和归一化
cmap = plt.cm.jet
cNorm = colors.Normalize(vmin=np.min(V), vmax=np.max(V))
scalarMap = cm.ScalarMappable(norm=cNorm, cmap=cmap)

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.7, 0.855])  # [left, bottom, width, height]
axc = fig.add_axes([0.85, 0.10, 0.05, 0.85])

# 定义6个箭头的坐标和方向参数,顺序与V数组对应
arrows_params = [
    (200, 400, -50, -50),
    (200, 400, 50, -50),
    (200, 400, 0, -50),
    (200, 300, 50, 0),
    (200, 300, 50, -50),
    (400, 300, -50, -50)
]

# 遍历每个箭头,分配对应颜色
for idx in range(len(V)):
    x, y, dx, dy = arrows_params[idx]
    colorVal = scalarMap.to_rgba(V[idx])
    ax.arrow(x, y, dx, dy, width=5, head_length=20, fc=colorVal, ec=colorVal)

# 仅创建一次颜色条
cb1 = mpl.colorbar.ColorbarBase(axc, cmap=cmap, norm=cNorm, orientation='vertical')

ax.set_xlim(left=0, right=500)
ax.set_ylim(bottom=0, top=500)
plt.show()

关键修改点:

  • 把6个箭头的参数整理成列表arrows_params,确保顺序和V数组一一对应
  • 循环中取出对应箭头的参数,将计算得到的colorVal赋值给箭头的填充色(fc)和边缘色(ec)
  • 将颜色条的创建代码移出循环,避免重复生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:48:26