如何在Matplotlib中设置颜色条范围?

2 投票
1 回答
8888 浏览
提问于 2025-04-18 17:02

我用Matplotlib的quiver函数绘制了不同的向量场。

plt.figure()

x, y = numpy.mgrid[-x_dim/2:x_dim/2:x_steps*1j, -y_dim/2:y_dim/2:y_steps*1j]

m = numpy.sqrt(numpy.power(vector_field_x, 2) + numpy.power(vector_field_y, 2))

fig = plt.quiver(x, y, vector_field_x, vector_field_y, m)
cb = plt.colorbar(fig)

# Add some margin
l, r, b, t = plt.axis()
dx, dy = r-l, t-b
plt.axis([l-0.1*dx, r+0.1*dx, b-0.1*dy, t+0.1*dy])

plt.savefig(file_path + '.png', dpi=Vc.dpi)
plt.close()

这些向量场都是相关的,我需要能够对它们进行比较。

如果我直接绘制它们,得到的图像就像这样:

enter image description here enter image description here

从图中可以看出,由于它们的最大值不同,所以在图中显示的比例也不一样(使用了不同的边界)。所以,我的第一个想法是把它们都归一化处理(也就是考虑所有向量场的最大值)。

这样做后,我再绘制向量,比例稍微有点变化。不过,边界还是根据每个图的最小值和最大值来调整的。

接着,我尝试添加:

cb.set_clim(vmin=0, vmax=1)

用这段代码,我得到了这样的颜色条:

enter image description here

也就是说,我的颜色条范围固定在0到1之间,所以在所有图中,橙色代表的都是0.8。这是我想要的效果。不过,我希望能够绘制“完整”的颜色条,显示从0到1的所有值。

这样做有可能吗,而不需要创建一个自定义的颜色条?

谢谢。

1 个回答

4

quiver 这个函数有一个可选的参数叫 clim

fig = plt.quiver(x, y, vector_field_x, vector_field_y, m, clim=[-2,2])

这样应该可以正常工作。:)

撰写回答