Pyplot contourf不会填写" 0"水平

时间:2017-11-27 17:38:17

标签: python matplotlib matplotlib-basemap

我正在绘制天气模型输出的降水数据。我使用contourf来描绘我拥有的数据。但是,我不希望它填写" 0"颜色级别(仅值> 0)。有没有办法做到这一点?我试过搞乱这些关卡。

这是我用来绘制的代码:

m = Basemap(projection='stere', lon_0=centlon, lat_0=centlat,
            lat_ts=centlat, width=width, height=height)

m.drawcoastlines()
m.drawstates()
m.drawcountries()
parallels = np.arange(0., 90, 10.)
m.drawparallels(parallels, labels=[1, 0, 0, 0], fontsize=10)
meridians = np.arange(180., 360, 10.)
m.drawmeridians(meridians, labels=[0, 0, 0, 1], fontsize=10)

lons, lats = m.makegrid(nx, ny)
x, y = m(lons, lats)
cs = m.contourf(x, y, snowfall)
cbar = plt.colorbar(cs)
cbar.ax.set_ylabel("Accumulated Snow (km/m^2)")
plt.show()

这就是我得到的形象。

Precipitation Plot

示例降雪数据集如下所示:

0 0 0 0 0 0
0 0 1 1 1 0 
0 1 2 2 1 0
0 2 3 2 1 0
0 1 0 1 2 0 
0 0 0 0 0 0

2 个答案:

答案 0 :(得分:0)

我能够自己解决问题,我找到了解决这个问题的两种方法。

  1. 使用

    屏蔽数据集中的所有数据< 0.01
    np.ma.masked_less(snowfall, 0.01)
    

  2. 将绘图的级别设置为0.01 - >无论最大值

    levels = np.linspace(0.1, 10, 100)
    

    然后

    cs = m.contourf(x, y, snowfall, levels)
    
  3. 我发现选项1最适合我。

答案 1 :(得分:0)

如果您未在0中加入levels,则无法在0级绘制轮廓。

例如:

import numpy as np
import matplotlib.pyplot as plt

a = np.array([
        [0, 0, 0, 0, 0, 0],
        [0, 0, 1, 1, 1, 0],
        [0, 1, 2, 2, 1, 0],
        [0, 2, 3, 2, 1, 0],
        [0, 1, 0, 1, 2, 0],
        [0, 0, 0, 0, 0, 0]
        ])

fig, ax = plt.subplots(1)

p = ax.contourf(a, levels=np.linspace(0.5, 3.0, 11))
fig.colorbar(p)

plt.show()

的产率:

enter image description here

另一种方法是屏蔽任何0:

的数据点
p = ax.contourf(np.ma.masked_array(a, mask=(a==0)),
        levels=np.linspace(0.0, 3.0, 13))
fig.colorbar(p)

看起来像:

enter image description here

我认为由你决定哪一个与你想要的情节最匹配。