使用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 运行如下图所示