3

我有两个二维数组,每个数组都代表地图上的一个属性。其中一个代表冰雹概率(0%-100%),另一个代表冰雹严重程度(0-无冰雹、1-低、2-中、3-高)。

imshow我可以使用 matplotlib和预定义的颜色图分别绘制这些数组:

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函数,但是数据很不规则,而且图表看起来很糟糕。

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

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

4

2 回答 2

2

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

这是一些随机数据

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

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

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)

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

随机尺寸和颜色

或者更有趣的形状: 其他形状

于 2013-09-13T14:00:44.847 回答
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()
于 2013-09-13T11:01:45.633 回答