炸鸡人博客 基本上无害
Posts with the tag matplotlib:

Matplotlib 中的 Artist——你在浪费时间瞎百度之前应该知道的东西

这是 @skotaro 在 2018 年发布的一篇关于 Matplotlib Artist 的通俗易懂的介绍,很适合作为官方教程的前置读物,故翻译于此,原文标题是 “Artist” in Matplotlib - something I wanted to know before spending tremendous hours on googling how-tos.。文中绝大部分链接都重定向到了最新版本的 Matplotlib 文档,还请读者注意。

fig_0

毫无疑问 Python 里的 matplotlib 是个非常棒的可视化工具,但在 matplotlib 中慢慢调细节也是件很烦人的事。你很容易浪费好几个小时去找修改图里细节的方法,有时你连那个细节的名字也不知道的话,搜索起来会更加困难。就算你在 Stack Overflow 上找到了相关的提示,也可能再花几个小时根据需求来修改它。不过,只要了解了 matplotlib 图的具体组成,以及你可以对组件执行的操作,就能避开这些徒劳无益的工作。我想,我跟你们中的大多数人一样,做图时遇到的困难都是靠读 Stack Overflow 上那些 matplotlib 高手们的答案来解决的。最近我发现 官方的 Artist 对象教程 信息很丰富,有助于我们理解 matplotlib 的画图过程并节省调图时间1。本文里我会分享一些关于 matplotlib 里 Artist 对象的基本知识,以避免浪费数小时调图的情况出现。

Cartopy 系列:对入门教程的补充

前言

几年前曾写过 Cartopy 系列:从入门到放弃,但现在来看还是遗漏了不少细节,比如初学者可能会遇到以下问题

  • 经度是用 [-180°, 180°] 还是 [0°, 360°] 范围?
  • 为什么有时候设置的刻度显示不全?
  • 怎么截取跨越地图边界的区域,画图又怎么跨越边界?

本文将会用坐标变换的思想来解答以上问题,希望能给读者一些实用的启示。本来应该把这些内容写到入门教程里的,但可能会太长,所以现在单独成篇。文中的讨论主要针对最常用的 Plate Carrée 投影,其它投影需要读者自己测试。代码基于 Cartopy 0.18.0,虽然现在已经更新到 0.20.0 了,但基本思想是一致的。

Matplotlib 系列:colorbar 的设置

0. 前言

承接 Matplotlib 系列:colormap 的设置 一文,这次介绍 colorbar。所谓 colorbar 即主图旁一个长条状的小图,能够辅助表示主图中 colormap 的颜色组成和颜色与数值的对应关系。本文将会依次介绍 colorbar 的基本用法、如何设置刻度,以及怎么为组图添加 colorbar。代码基于 Matplotlib 3.3.4。

Matplotlib 系列:colormap 的设置

0. 前言

所谓 colormap(颜色表),就是将一系列颜色按给定的顺序排列在一起。其用处是,我们可以通过某种映射关系,将一系列数值映射到一张 colormap 上去,使不同大小的数值对应不同的颜色。这样一来,在绘制填色图时便能直观地用颜色来反映数值的分布。

在 Matplotlib 中,数值到颜色的映射关系可以用下面这张流程图来表示

flowchart

图中分为前后两部分

  • 首先将数组归一化(normalize)到浮点型的 [0, 1] 范围(或整型的 [0, N - 1] 范围)上去。
  • 再把归一化的数组输入给 colormap,查询每个数值对应的颜色。

第二部分的映射关系是固定不变的,但第一部分的映射关系可以通过归一化相关的类加以改变,进而实现对数色标、对称色标、离散色标等一系列填色效果。

本文将会依次介绍 Colormap 类、Normalize 类,以及实际应用的例子。代码基于 Matplotlib 3.3.4。

Matplotlib 系列:导出高 DPI 的图片

前言

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

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

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。