9

我有一个图形,由 显示的图像imshow()、轮廓和由 设置的矢量场组成quiver()。我根据另一个标量对矢量场进行了着色。在我图的右边,我做了一个colorbar(). 这colorbar()表示显示的值imshow()(在我的情况下可以是正数和负数)。我想知道如何设置另一个颜色条,该颜色条将基于向量颜色所基于的标量值。有谁知道这是怎么做到的吗?

这是我能够制作的图像的示例。请注意,向量的颜色从蓝色变为红色。根据当前的颜色条,蓝色表示负数。但是我知道向量的颜色所代表的数量总是正的。

在此处输入图像描述

4

2 回答 2

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()

在此处输入图像描述

于 2012-08-15T15:23:59.840 回答
4

运行 quiver 不一定会返回所需的可映射对象类型colorbar()。我认为这可能是因为我明确地“根据另一个标量对矢量场进行了着色”,就像 Heimdall 所说的那样。因此,Hooked 的回答对我不起作用。

我必须创建自己的可映射颜色条才能读取。我通过使用Normalizefrommatplotlib.colors数据来为我的箭袋矢量着色(我将其称为,它是一个与、、和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 函数提供任何其他参数给了我各种错误。

我的示例,其中矢量颜色显示第三个数据轴

于 2013-01-30T15:04:17.720 回答