Python 使用手动显式标高覆盖tricontourf和散点图
我正在尝试将散点图(显示观察结果)覆盖到填充轮廓图(显示相同变量的模型数据)上,使用完全相同的级别映射到che colorscale。主要问题是,我没有使用“通用”的Python 使用手动显式标高覆盖tricontourf和散点图,python,matplotlib,colormap,levels,contourf,Python,Matplotlib,Colormap,Levels,Contourf,我正在尝试将散点图(显示观察结果)覆盖到填充轮廓图(显示相同变量的模型数据)上,使用完全相同的级别映射到che colorscale。主要问题是,我没有使用“通用”的contour/contourf函数,而是使用tricontourf,因为我的数据位于非结构化网格上 看起来一些通常使用tourf的方法被tricontourf忽略了,而且这不是我第一次必须找到解决办法,因为实际使用tricontourf的选项没有很好的文档记录(例如,如何使用缺少的值进行绘图) 我想绘制累积降水量图。我有来自站点的
contour
/contourf
函数,而是使用tricontourf
,因为我的数据位于非结构化网格上
看起来一些通常使用tourf
的方法被tricontourf
忽略了,而且这不是我第一次必须找到解决办法,因为实际使用tricontourf
的选项没有很好的文档记录(例如,如何使用缺少的值进行绘图)
我想绘制累积降水量图。我有来自站点的准时数据和来自模型的网格数据。两者都是由一维纬度和经度数组描述的一维数组。我需要为两个图选择相同的级别,因为我想覆盖它们并查看差异。我正在使用pyplot.scatter
绘制点,并使用pyplot.tricontourf
绘制模型数据。以下是我使用的方法:
pyplot.scatter
和pyplot.tricontourf
定义vmin
和pyplot.tricontourf
,使用相同的cmap,以便它们以相同的级别映射->不起pyplot的作用。tricontourf
显然忽略了vmin
和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
在级别之间线性插值tricontourf
选择一个线性的水平序列(用np.linspace
定义),然后应用第2点的方法。规范化散点图的颜色
但是,我想做的是能够手动定义级别。
有人知道如何做到这一点吗
最重要的是,为什么
tricontourf
忽略了vmin
和vmax
查看您发布的链接和文档,pyplot.tricontourf
似乎不接受vmin
和vmax
。在您发布的示例中使用它的方式是使用norm
参数:plt.tricontourf(x,y,z,norm=plt.Normalize(vmax=abs(zi.max(),vmin=-abs(zi.max())
我也这样做了,但它仍然不起作用。这些级别仍然是自动设置的。顺便说一下,文档中没有提到vmin
和vmax
被tricontourf
忽略。我在另一个问题上发现了这一点。