炸鸡人博客 基本上无害

Matplotlib 系列:导出高 DPI 的图片

前言

昨天一同学问我怎么把已经画好的图片的 DPI 改到 300,以满足期刊对图片清晰度的要求。上网搜索一番后才发现,虽然我经常在 Matplotlib 中用 dpi 参数来调节图片清晰度,但实际上我对这个概念半懂不懂。这次借这个契机调研和总结一下相关的知识。本文将会依次介绍

  • 分辨率和 DPI 是什么。
  • DPI 和清晰度的关系。
  • 如何导出期刊要求的高 DPI 图片。

Python 系列:操作文件和目录的路径

前言

之前在 Linux 上用 Python 处理系统的文件和目录时,我都是简单粗暴地用 os.system 函数直接执行 shell 命令来实现的。例如新建一个目录并把文件移动进去,我会这么写

dirpath = './result'
filepath = './data.txt'
os.system(f'mkdir {dirpath}')
os.system(f'mv {filepath} {dirpath}')

即把 shell 命令硬编码到程序中。但最近在 Windows 上运行老程序时,因为 os.system 默认调用 CMD,所以这种写法的老代码全部木大。

其实借助 Python 标准库中用于系统交互和路径处理的模块,就能尽可能降低代码对平台的依赖,并且模块中也提供有许多方便的函数。本文会记录那些最常用的功能。

Cartopy 系列:为 Lambert 投影地图添加刻度

前言

Cartopy 中的 Plate Carrée 投影使用方便,但在展示中国地图时会使中国的形状显得很瘪,与之相比,Lambert 投影的效果会更加美观,下图显示了两种投影的差异

comparison

所以本文将会介绍如何在 Cartopy 中实现 Lambert 投影,并为地图添上合适的刻度。文中 Cartopy 的版本是 0.18.0。

Cartopy 系列:从入门到放弃

简介

常用的地图可视化的编程工具有 MATLAB、IDL、GrADS、GMT、NCL 等。我之前一直使用的是脚本语言 NCL,易用性不错,画地图的效果也很好。然而 2019 年初,NCAR 宣布 NCL 将停止更新,并会在日后转为 Python 的绘图包。于是我开始考虑转投 Python,同时觉得在 Python 环境下如果还是用 PyNGL 那一套语法的话,未免有些换汤不换药。因此我选择用 Python 环境下专有的 Cartopy 包来画地图。

cartopy_log

此前 Python 最常用的地图包是 Basemap,然而它将于 2020 年被弃用,官方推荐使用 Cartopy 包作为替代。Cartopy 是英国气象局开发的地图绘图包,实现了 Basemap 的大部分功能,还可以通过 Matplotlib 的 API 实现丰富的自定义效果。

本文将会从一个 NCL 转 Python 的入门者的角度,介绍如何安装 Cartopy,如何绘制地图,并实现一些常用的效果。代码基于 0.18.0 版本的 Cartopy。

NumPy 系列:缺测值处理

现实中观测的数据或多或少会有缺失的部分,通常称为缺测值(missing value)。NumPy 因为设计上的问题,不能像 R 和 NCL 那样原生支持缺测类型,而是有两种处理缺测的实现:NaN 和 masked array。下面便来依次介绍它们。代码基于 NumPy 1.20.1。

立体角简介

这里简单介绍一下立体角的概念。

定义

在考虑辐射传输问题时,为了度量源点对某一范围的视场角大小,我们引入立体角的概念。通常教材上的定义如下图所示,一个半径为 $r$ 的球体,用顶点与球心重合的圆锥去截球面,截取的球面积 $A$ 的大小除以半径的平方,即是立体角。

defination

炸 鸡 人

devil_man