使用手动显式电平叠加tricontourf和散点图

时间:2018-08-22 08:17:40

标签: python matplotlib colormap levels contourf

我正在尝试使用完全相同的色阶将色散图(显示观察结果)覆盖在填充的轮廓图(显示相同变量的模型数据)上,以将其映射到色标上。主要问题是我没有使用“公用” contour / contourf函数,而是使用tricontourf,因为我的数据位于非结构化网格上。

contourf似乎忽略了通常可以在tricontourf上使用的某些方法,这并不是我第一次找到解决方法,因为选项实际上可以与tricontourf一起使用记录不充分(例如,如何使用缺失值绘图)。

我想绘制累积的降水量。我有来自站点的守时数据和来自模型的网格数据。两者都是一维数组,由一维纬度和经度数组描述。我需要为两个图选择相同的级别,因为我想覆盖它们并查看差异。我正在使用pyplot.scatter绘制点,并使用pyplot.tricontourf绘制模型数据。这是我使用的方法:

  1. 使用相同的cmap为vminvmax定义pyplot.scatterpyplot.tricontourf,以使它们以相同的级别进行映射->与{{ 1}}显然忽略了pyplot.tricontourfvmin。在此示例之后,https://matplotlib.org/examples/pylab_examples/tricontour_vs_griddata.html对我不起作用。只需忽略它们,即可自动定义级别。
  2. 由于在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忽略vminvmax

0 个答案:

没有答案