为什么在matplotlib中设置colorbar()的可映射对象不能正常工作?

时间:2017-03-23 01:18:50

标签: python matplotlib colorbar

我正在尝试生成每日温度热图的GIF。我先生成每小时的热图。然后我使用imageio附加所有生成的图像以生成最终的gif。

以下是显示我的基本逻辑的草稿代码:

# Find min and max value from all sample data
while (count < len(grib_objects)):
    vmax = max(grib_objects[count]['maximum'], vmax)
    vmin = min(grib_objects[count]['minimum'], vmin)
    count++
# Get the standard mappable object
cs = self.GenerateMasterMappable(grib_objects[0], vmin, vmax)

# Generate image of each frame with defined vmin, vmax and cs
count = 0
while count < len(grib_objects):
    self.Frame(grib_objects[count], filenames[index], vmin, vmax, cs)
    count++

# Generate the final gif by appending each generated image as above

由于生成的每个热图具有不同的数据值范围,因此它们具有不同的颜色条比例。但是我想要一个带有静态颜色条的移动热图。因此,我尝试使用每小时样本生成一个标准颜色条,并将此颜色条用于所有其他图像。

我使用一个示例数据来获取可映射对象 cs 并将其传递给colorbar函数。但这不能按预期工作,gif仍显示动态颜色条。似乎标准的可映射对象cs设置不正确。

以下是我在函数GenerateMasterMappable中获取可映射对象cs的代码:

GenerateMasterMappable(self, grib_object, vmin, vmax):
    data = grib_object.values
    lat,lon = grib_object.latlons()

    m = Basemap(
            resolution='c', # c, l, i, h, f or None
            projection='cyl',
            lat_0=39.72, lon_0=-86.29,
            llcrnrlon=-87.79, llcrnrlat= 38.22,
            urcrnrlon=-84.79, urcrnrlat=41.22)

    x,y = m(lon, lat)
    cs = m.pcolormesh(x,y,data,
                    shading='flat',
                    vmin=vmin,
                    vmax=vmax,
                    cmap=plt.cm.jet)
    return cs

然后我将这个标准的可映射对象传递给函数Frame,它按如下方式生成每小时的热图:

Frame(self, grib_object, file_name, vmin, vmax, cs):
    ... // draw basic map layout m
    x,y = m(lon, lat)
    norm = mpl.colors.Normalize(vmin=vmin,vmax=vmax)

    ab = m.pcolormesh(x,y,data,
                    shading='flat',
                    vmin=vmin,
                    vmax=vmax,
                    cmap=plt.cm.jet)
    // passing cs as first parameter does not really make a difference, why?
    cbar = plt.colorbar(cs,location='bottom', fraction=0.046, pad=0.06)

事实上,即使我删除了colorbar()中的第一个参数,最终的gif也保持不变。是否有一种正确的方法来绘制独立于当前图像(热图)的标准颜色条?

0 个答案:

没有答案