我正在尝试使用完全相同的色阶将色散图(显示观察结果)覆盖在填充的轮廓图(显示相同变量的模型数据)上,以将其映射到色标上。主要问题是我没有使用“公用” contour
/ contourf
函数,而是使用tricontourf
,因为我的数据位于非结构化网格上。
contourf
似乎忽略了通常可以在tricontourf
上使用的某些方法,这并不是我第一次找到解决方法,因为选项实际上可以与tricontourf
一起使用记录不充分(例如,如何使用缺失值绘图)。
我想绘制累积的降水量。我有来自站点的守时数据和来自模型的网格数据。两者都是一维数组,由一维纬度和经度数组描述。我需要为两个图选择相同的级别,因为我想覆盖它们并查看差异。我正在使用pyplot.scatter
绘制点,并使用pyplot.tricontourf
绘制模型数据。这是我使用的方法:
vmin
和vmax
定义pyplot.scatter
和pyplot.tricontourf
,以使它们以相同的级别进行映射->与{{ 1}}显然忽略了pyplot.tricontourf
和vmin
。在此示例之后,https://matplotlib.org/examples/pylab_examples/tricontour_vs_griddata.html对我不起作用。只需忽略它们,即可自动定义级别。由于在vmax
中指定级别的唯一方法是使用pyplot.tricontourf
自变量,因此我通过定义值数组来这样做。这适用于levels
,但随后我必须将其映射为散点图。
tricontourf
不幸的是,这也不起作用,因为levels=[10, 12, 15, 20, 25, 30, 35, 40,
45, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200, 225, 250]
contourf=plt.tricontourf(lon, lat, rain_acc, levels=levels,
cmap='GnBu', extend='max')
bounds=np.array(levels)
norm = colors.BoundaryNorm(boundaries=bounds, ncolors=256)
scatter=plt.scatter(x, y, c=rain_stations, s=50, cmap='GnBu',
zorder=10, norm=norm)
在各个级别之间线性插值。
因此,到目前为止,我唯一需要覆盖数据的方法是为BounaryNorm
选择一个线性的级别序列(用np.linspace
定义),然后应用点2的方法对散点图的颜色。
Here you can see the picture that I'm producing
但是我想做的是能够手动定义级别。 有人知道如何实现吗?
最重要的是,为什么tricontourf
忽略vmin
和vmax
?