我有一个由imshow()
显示的图像,由quiver()
设置的轮廓和矢量场组成的图形。我根据另一个标量确定了矢量场的颜色。在我的身材右侧,我做了一个colorbar()
。此colorbar()
代表imshow()
显示的值(在我的情况下可以是正数和负数)。我想知道如何设置另一个颜色条,它将基于矢量颜色所基于的标量的值。有谁知道怎么做?
这是我能够制作的图像的一个例子。请注意,矢量的颜色从蓝色变为红色。根据当前的颜色条,蓝色表示否定。但是我知道矢量颜色代表的数量总是正数。
答案 0 :(得分:7)
在每个绘图电话后立即拨打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()
答案 1 :(得分:4)
运行箭头不一定返回colorbar()
所需的可映射对象的类型。我想这可能是因为我明确地“根据另一个标量来着色矢量场”,就像Heimdall所说的那样。因此,Hooked的回答对我不起作用。
我必须创建自己的mappable才能读取颜色条。我是通过Normalize
使用matplotlib.colors
对我想要用来为我的箭矢量着色的数据(我称之为C
,这是一个形状相同的数组X
,Y
,U
和V
。)
我的箭袋看起来像这样:
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函数提供任何其他参数给了我各种错误。