停止contourf插值

时间:2018-03-07 12:34:58

标签: python matplotlib matplotlib-basemap contourf

我正在尝试使用contourf(matplotlib)在底图中绘制一些2D值。

但是,缺省情况下,contourf会插入中间值并提供更平滑的数据图像。

有没有办法让contourf停止在值间插值?

我试过添加关键字参数interpolation ='nearest',但contourf不使用它。 其他选项可能是使用imshow,但是有一些不能与imshow一起使用的contourf功能。

我正在使用python 3.6.3和matplotlib 2.1.2

3 个答案:

答案 0 :(得分:1)

尝试使用“ pcolormesh”, 您可以使用它绘制二维值,而无需在它们之间进行插值。

'pcolormesh'(来自matplotlib文档):

  

使用非规则矩形网格创建伪彩色图。

代码示例:

import matplotlib.pyplot as plt
plt.pcolormesh(data)
plt.show()

在这里您可以看到如何以与'contourf'类似的方式使用'pcolormesh'(也有一个示例图):

https://matplotlib.org/examples/images_contours_and_fields/pcolormesh_levels.html

答案 1 :(得分:0)

鉴于该问题尚未更新以澄清实际问题,我将简单回答问题:

不,contour无法进行插值,因为等高线图的整个概念是插值。

答案 2 :(得分:0)

在绘制具有不确定性的类决策边界(颜色)(将颜色混合为白色)时,我遇到了同样的问题。在两个边界之间,由于插值,我有其他类别的颜色。这些界限是错误的。查看从蓝色到红色的过渡:

Wrong decision boundaries

我通过一次只绘制一个班来解决了这个问题。可以使用masked arrays

# C contains classes 0, 1, 2 as mesh
# CU contains classes with uncertainty, CU = 2 * C + U, where 0 <= U <= 1
# xx and yy are the mesh variables
for cl in np.unique(C):   # iterate over red, green, blue classes
    mask = C != cl
    xx_ma = np.ma.MaskedArray(xx, mask)
    yy_ma = np.ma.MaskedArray(yy, mask)
    CU_ma = np.ma.MaskedArray(CU, mask)
    cnt = plt.contourf(xx_ma, yy_ma, CU_ma, vmin=0, vmax=5,
                       cmap=cmap, levels=len(np.unique(CU)))

这是结果:

enter image description here


使用pcolormesh时,无需分别绘制类,但是数据必须采用其他格式。基本上,您需要一个xy网格作为拐角(网格),另一个xy网格作为中心(值):

(X[i+1, j], Y[i+1, j])          (X[i+1, j+1], Y[i+1, j+1])
                      +--------+
                      | C[i,j] |
                      +--------+
    (X[i, j], Y[i, j])          (X[i, j+1], Y[i, j+1]),

结果看起来像这样(现在有精确的角):

enter image description here