使用Jupyter Notebook显示NCL绘图

目录

数值预报中心的大部分业务系统都使用 GrADS 或者 NCL 绘制图片产品。 例如 GRAPES GFS 后处理系统由 ecFlow 构建,并使用 shell 调用 ncl 脚本绘制图片。

最近尝试使用 Jupyter Notebook,对业务系统的后处理绘图脚本进行了二次加工,封装现有的 NCL 脚本提供便捷的图形绘制方法。

NCL脚本介绍

以 GRAPES GFS 后处理系统的绘图脚本为例说明。 NCL 脚本既使用环境变量,也使用命令行参数,同时某些脚本还需要读取运行目录下的文本文件。

业务系统的后处理使用了通用的绘图库,所以需要设置绘图库的路径。 另外,绘图还需要使用到某些特殊的环境变量。

export GEODIAG_ROOT=/g1/u/nwp_pd/GEODIAG
export GEODIAG_TOOLS=/g1/u/nwp_pd/GEODIAG/tools
export GRAPHIC_PRODUCT_LIB_ROOT=${NCLLIB}/
export GRAPHIC_PRODUCT_SCRIPT_ROOT=${GRAPHIC_PRODUCT_LIB_ROOT}
export FORECAST_DATA_FORMAT="grib2"
export FORECAST_DATA_CENTER="ecmwf"

本地文本文件用于指定起报时间、预报时效和预报时间。

export NEWDATE=`smsdate $startdate +${fhr}`
cat > grapes_meso_date << EOF
${startdate}${fhr}
${NEWDATE}
EOF

命令行参对于大部分 NCL 脚本都相同,包括时间相关参数,输入数据目录,输出图片目录等。

ncl initial_time=$initial_time \
    min_forecast_time=$min_forecast_time \
    max_forecast_time=$max_forecast_time \
    forecast_time_interval=$forecast_time_interval \
    data_path=\"$data_path\" \
    graphic_output_home=\"$graphic_output_home\" \
    $file_name

使用Python执行NCL脚本

在 Python 调用 NCL 脚本可以使用 subprocess 包配置好环境变量后直接执行 ncl 命令。 但 Python 脚本运行的环境可能无法直接使用 NCL,例如在 conda 单独的 env 中安装 NCL 库。 这种情况下,可以在 Python 中调用一个 shell 脚本,在 shell 中首先载入NCL环境,再执行 NCL 命令。

# activate anaconda environment for NCL.
source ./load_env.sh

# run ncl script
ncl -x initial_time=${initial_time} \
     min_forecast_time=${min_forecast_time} \
     max_forecast_time=${max_forecast_time} \
     forecast_time_interval=${forecast_time_interval} \
     data_path=\"${data_path}\" \
     graphic_output_home=\"${graphic_output_home}\" \
     ${file_name}

如果使用 NCL 官网推荐的方式使用 conda 安装 NCL,则可以使用下面的 load_env.sh

source /some/path/to/anaconda/etc/profile.d/conda.sh
conda activate ncl_stable

使用IPython显示图片

业务系统中 NCL 生成的图片文件都是 PNG 格式。 集成到 Jupyter Notebook 中需要将生成的本地文件显示在 Notebook 中。 使用 IPython 可以实现。

image_list = _get_image_list()
from IPython.display import Image, display
for an_image in image_list:
    display(Image(filename=f"./{an_image['path']}"))

示例

from nwpc_graphics.systems.grapes_gfs_gmf import show_plot
show_plot("pwat_sfc_an_aea", "20200113", "00", "24h")

Notebook 运行如下图所示

Notebook 示例

参考

nwpc-oper/nwpc-graphics