我如何选择 cmap 来绘制带有条件 IF 的 netCDF4 文件中的变量?

how can i choose cmap to plot variables in netCDF4 file with condition IF?

我有一个 netCDF4 文件,其中有几个变量是 IR 或 VIS 变量(红外线或可见光通道)我有一个代码可以读取文件 netCDF4 并在创建 list_var 后允许显示变量,问题是什么对于红外通道的可视化,我必须选择 cmap = plt.cm.gist_yarg,对于可见通道,cmap = plt.cm.gist_gray

我需要使用条件 if 来指示以防变量以 IR 或 VIS 开头,cmap 将更改,但我不知道如何为我的代码执行此操作:

显示我在 list_var 中选择的变量之一的代码:

import numpy as np 
import netCDF4 
from netCDF4 import Dataset 
import pylab as plt


fic='Mmultic3kmNC4_msg04_201905080200.nc

path='/home/data/'
nc = netCDF4.Dataset(path+fic,'r')

nc.variables.keys() 

print nc.variables.keys()

odict_keys(['time', 'dtime', 'IR_016', 'commentaires', 'satellite', 'geos', 'ImageNavigation', 'GeosCoordinateSystem', 'Y', 'X', 'Albedo_to_Native_count_IR_016', 'IR_039', 'Temp_to_Native_count_IR_039', 'IR_087', 'Temp_to_Native_count_IR_087', 'IR_097', 'Temp_to_Native_count_IR_097', 'IR_108', 'Temp_to_Native_count_IR_108', 'IR_120', 'Temp_to_Native_count_IR_120', 'IR_134', 'Temp_to_Native_count_IR_134', 'VIS006', 'Albedo_to_Native_count_VIS006', 'VIS008', 'Albedo_to_Native_count_VIS008', 'WV_062', 'Temp_to_Native_count_WV_062', 'WV_073', 'Temp_to_Native_count_WV_073'])

vars = [nc.variables['VIS006'],nc.variables['VIS008'],nc.variables['IR_120'],nc.variables['IR_108'],nc.variables['IR_087'],nc.variables['IR_134'],nc.variables['IR_039'],nc.variables['WV_073'],nc.variables['WV_062'],nc.variables['IR_097']]

vars_list = ['VIS006','VIS008','IR_120','IR_108','IR_087','IR_134','IR_039','WV_073','WV_062','IR_097']

vars  = [nc.variables[f] for f in vars_list]

plt.imshow(vars[1],cmap=plt.cm.gist_gray)

#(var_list 中的 var1 是 = VIS008 所以我使用 cmap=plt.cm.gist_gray)

我需要在我的代码中使用条件的代码行:

if "IR" in var:
            plt.imshow(var[..], cmap=plt.cm.gist_yarg)
elif "VIS" in var:
            plt.imshow(vars[..], cmap=plt.cm.gist_gray)

如果您有任何想法和帮助使用条件来为 iR 或 VIS 选择 cmap 并在之后显示它!

谢谢

netcdf4 文件在这里:netcdf

在您当前的代码中,您可以执行如下操作:

import matplotlib.pyplot as plt

vars_list = ['VIS006','VIS008','IR_120','IR_108','IR_087','IR_134','IR_039','WV_073','WV_062','IR_097']

cmaps = []
for var in vars_list:
    if 'VIS' in var:
        cmaps.append(plt.cm.gist_yarg)
    elif 'IR' in var:
        cmaps.append(plt.cm.gist_gray)
    else: # Make sure we have a default
        cmaps.append(plt.cm.jet)

plt.imshow(vars[1],cmap=cmaps[1])

或者,如果你在 vars 列表上写一个循环,你可以这样做:

for var in vars:
    if 'VIS' in var.name:
        cmap = plt.cm.gist_yarg
    elif 'IR' in var.name:
        cmap = plt.cm.gist_gray
    else: # Make sure we have a default
        cmap = plt.cm.jet

    plt.imshow(var, cmap=cmap)

完整的工作示例:

import netCDF4 
import matplotlib.pyplot as plt

nc = netCDF4.Dataset('Mmultic3kmNC4_msg04_201903090130.nc','r')
vars_list = ['VIS006','VIS008','IR_120','IR_108','IR_087','IR_134','IR_039','WV_073','WV_062','IR_097']
vars  = [nc.variables[f] for f in vars_list]

for var in vars:
    if 'VIS' in var.name:
        cmap = plt.cm.gist_yarg
    elif 'IR' in var.name:
        cmap = plt.cm.gist_gray
    else: # Make sure we have a default
        cmap = plt.cm.jet

    plt.figure()
    plt.imshow(var, cmap=cmap)

以及如何绘制单个地图的示例:

import netCDF4 
import matplotlib.pyplot as plt

nc = netCDF4.Dataset('Mmultic3kmNC4_msg04_201903090130.nc','r')
vars_list = ['VIS006','VIS008','IR_120','IR_108','IR_087','IR_134','IR_039','WV_073','WV_062','IR_097']
vars  = [nc.variables[f] for f in vars_list]

cmaps = []
for var in vars_list:
    if 'VIS' in var:
        cmaps.append(plt.cm.gist_yarg)
    elif 'IR' in var:
        cmaps.append(plt.cm.gist_gray)
    else: # Make sure we have a default
        cmaps.append(plt.cm.jet)

plt.figure()
plt.imshow(vars[2], cmap=cmaps[2])