Matplotlib:quiver和imshow重叠,如何设置两个颜色条?

2024-05-15 21:11:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个图形,由imshow()显示的图像、轮廓和quiver()设置的向量场组成。我已经根据另一个标量给向量场上色了。在我的图的右边,我做了一个colorbar()。这个colorbar()表示由imshow()显示的值(在我的例子中可以是正的和负的)。我想知道如何设置另一个颜色条,它将基于矢量颜色所基于的标量值。有人知道怎么做吗?

这是一个我能做的图像的例子。注意向量的颜色从蓝色变为红色。根据当前的颜色条,蓝色表示负数。但是我知道向量的颜色表示的量总是正的。

enter image description here


Tags: 图像图形颜色矢量向量例子轮廓蓝色
2条回答

只需在每次绘图调用之后调用colorbar两次。Pylab将创建一个与最新绘图匹配的新色条。注意,在您的示例中,箭袋值的范围是0,1,而imshow取负值。为了清晰起见(本例中没有显示),我将使用不同的颜色映射来区分这两种类型的绘图。

import numpy as np
import pylab as plt

# Create some sample data
dx = np.linspace(0,1,20)
X,Y = np.meshgrid(dx,dx)
Z  = X**2 - Y
Z2 = X

plt.imshow(Z)
plt.colorbar()

plt.quiver(X,Y,Z2,width=.01,linewidth=1)
plt.colorbar() 

plt.show()

enter image description here

运行quiver不一定返回colorbar()所需的可映射对象类型。我想可能是因为我显式地“根据另一个标量给向量场着色”,就像Heimdall说的那样。因此,胡克的回答对我不起作用。

我必须创建自己的可映射的颜色栏来阅读。我使用matplotlib.colors中的Normalize对我想要用来给箭袋向量上色的数据(我将称之为C,它是一个与XYUV形状相同的数组)

我的颤音是这样的:

import matplotlib.pyplot as pl
import matplotlib.cm as cm
import matplotlib.colors as mcolors
import matplotlib.colorbar as mcolorbar
pl.figure()

nz = mcolors.Normalize()
nz.autoscale(C)

pl.quiver(X, Y, U, V, color=cm.jet(nz(C)))
cax,_ = mcolorbar.make_axes(pl.gca())
cb = mcolorbar.ColorbarBase(cax, cmap=cm.jet, norm=nz)
cb.set_label('color data meaning')

为colorbar函数提供任何其他参数都会导致各种错误。

My example, where vector color shows third data axis

相关问题 更多 >