如何确定matplotlib中plt.quiver的颜色数值与颜色的对应关系
解决matplotlib quiver数值对应颜色的问题
当你给plt.quiver()的colour参数传入浮点数列表时,matplotlib会默认使用viridis颜色映射(colormap),并将你的数值自动归一化到0-1区间,对应colormap的颜色范围:
- 归一化后接近0的数值对应viridis的深紫色
- 接近0.3对应蓝色
- 接近0.5对应绿色
- 接近0.8对应浅黄
- 接近1对应亮黄色
你试数值500显示紫色,大概率是因为你的数值列表里存在比500大得多的数,导致500被归一化到接近0的区间,所以对应紫色。
具体解决方法
- 固定数值映射范围
通过设置vmin和vmax参数,手动指定数值的上下限,避免自动归一化干扰。比如你想让0对应蓝色、500对应绿色、1000对应黄色,可以这么写:
import matplotlib.pyplot as plt import numpy as np # 示例数据 x = np.arange(10) y = np.arange(10) u = np.zeros(10) v = np.zeros(10) colour = np.array([0, 250, 500, 750, 1000]*2) # 设置vmin和vmax固定数值范围,搭配viridis色图 plt.quiver(x, y, u, v, colour, vmin=0, vmax=1000, cmap='viridis') # 添加颜色条,直观查看数值与颜色的对应关系 plt.colorbar() plt.show()
- 查看色图的数值对应关系
如果你想精准知道某个数值对应什么颜色,可以直接调用色图函数查看RGB值:
# 查看viridis色图中0、0.3、0.5、0.8、1对应的RGB颜色 print(plt.cm.viridis([0, 0.3, 0.5, 0.8, 1]))
- 更换颜色映射
如果viridis不符合需求,你可以换成其他色图,比如rainbow、jet或者coolwarm,只需要修改cmap参数即可。
内容的提问来源于stack exchange,提问作者CSProgrammer
相关产品推荐
相关产品推荐

