Python matplotlib barbs/quiver 如何将颜色映射到不同的值集合?

4
我正在尝试在matplotlib中创建一个矢量图,并将一些颜色映射到特定的大小:例如,将大小在10到20之间的矢量绘制为蓝色,而在20到30之间绘制为rgb(0,15,40),以此类推。 barbs和quiver函数的文档(它们相似)提到了C输入参数:
barb(X,Y,U,V,C,**kw)
参数:
X,Y: barb位置的x和y坐标(默认为barb头部;请参见pivot kwarg)
U,V: 给出barb轴的x和y分量
C: 用于将颜色映射到barbs的可选数组
然而,这非常模糊,在Google上搜索了很久后,我仍然不知道如何以特定的方式使用这个颜色数组。我设法发现,通过将C设置为向量幅度的数组并指定“cmap”kwarg,它将映射barbs到指定的colormap,如下面的示例代码所示。但是,这不是我想要的。我想控制特定幅度组的颜色。任何帮助都将不胜感激。
示例代码:
from matplotlib import pyplot as plt
from numpy import arange,meshgrid,sqrt

u,v = arange(-50,51,10),arange(-50,51,10)
u,v = meshgrid(u,v)
x,y = u,v
C = sqrt(u**2 + v**2)
plt.barbs(x,y,u,v,C,cmap=plt.cm.jet)
plt.show()

生成的绘图图片链接:(抱歉,目前无法直接发布图片)

http://i49.tinypic.com/xombmc.jpg


注:该图片为IT技术相关内容。

您可以对色图进行离散化处理。请参考http://matplotlib.sourceforge.net/examples/api/colorbar_only.html。 - imsc
2个回答

3
你可以通过对地图进行离散化来获得它。
import matplotlib as mpl 
import pyplot as plt
from numpy import arange,meshgrid,sqrt

u,v = arange(-50,51,10),arange(-50,51,10)
u,v = meshgrid(u,v)
x,y = u,v
C = sqrt(u**2 + v**2)
cmap=plt.cm.jet
bounds = [10, 20, 40, 60]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
img=plt.barbs(x,y,u,v,C,cmap=cmap,norm=norm)
plt.colorbar(img, cmap=cmap, norm=norm, boundaries=bounds, ticks=bounds)
plt.show()

enter image description here


0
sx = 0
ex = 135
sy = 0
ey = 234
plt.barbs(x[sx:ex:5, sy:ey:5], y[sx:ex:5, sy:ey:5],
        u[sx:ex:5, sy:ey:5], v[sx:ex:5, sy:ey:5],
        u[sx:ex:5, sy:ey:5], cmap='coolwarm',
        linewidth=1)

尝试这个用于“根据风速显示不同颜色的标杆”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接