将两个2D阵列组合成一个图像图

时间:2013-09-13 10:46:09

标签: python numpy matplotlib

我有两个2D数组,每个都代表一个地图上的属性。其中一个代表冰雹概率(0%-100%)和其他冰雹严重程度(0-No Hail,1-Low,2-Medium,3-High)。

我可以使用matplotlib的imshow和预定义的colormap分别绘制这个数组:

import matplotlib.pyplot as plt
import matplotlib.colors as cl

cmap = cl.ListedColormap(['#00FF00', '#FFFF00', '#FF0000'])
bounds = [0, 30, 60, 100]
norm = cl.BoundaryNorm(bounds, cmap.N)

plt.subplot(121)
plt.imshow(hail_prob, cmap=cmap, norm=norm)

cmap = cl.ListedColormap(['#00FF00', '#FFFF00', '#FF0000'])
bounds = [0.5, 1.5, 2.5, 3.5]
norm = cl.BoundaryNorm(bounds, cmap.N)

plt.subplot(122)
plt.imshow(hail_sev, cmap=cmap, norm=norm)

如上所述,这很容易。

但是我想要一个结合了这两个功能的独特情节。我已经测试了contour函数,但数据非常不规则,而且情节看起来非常糟糕。

我一直在考虑将两个特征组合成一个色彩图,但我不太清楚如何做到这一点。假设我想要每种概率和严重性组合的颜色。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:2)

我会做一个散点图,颜色是一个值,大小是另一个。例如,颜色可能是概率,但尺寸可能是强度。

这是一些随机数据

hail_prob = np.random.rand(48, 64)
hail_sev = np.random.randint(0,4,hail_sev.shape)

在这里,您可以使用np.meshgrid从现有数据中获取x-y点,并在散点图中使用它们:

x = np.arange(hail_prob.shape[1])
y = np.arange(hail_prob.shape[0])
xy = np.meshgrid(x,y)
scatter(*xy, c=hail_prob, s=hail_sev)

您必须调整尺寸的标准化,因为您的单位将与良好的像素尺寸不同。

random size and color

或者更有趣的形状: some other shape

答案 1 :(得分:1)

我不确定这会是怎样的,但你可以使用不同的色彩图并将一个绘图叠加在另一个上面并使用顶部的alpha(透明度)进行播放。

说,

cmap1='Reds'
cmap2='Blues'
plt.imshow(hail_prob, cmap=cmap1, norm=norm)
plt.imshow(hail_sev, cmap=cmap2, norm=norm, alpha=0.5)
plt.colorbar()