解决博客 jsDelivr 资源无法访问的问题
前段时间重看自己的文章时发现公式渲染、图片的放大缩小和代码高亮等功能都失效了,按 F12 发现原因是引自 cdn.jsdelivr.net
的字体资源、CSS 和 JS 文件都无法访问,挂梯子后页面恢复正常。
前段时间重看自己的文章时发现公式渲染、图片的放大缩小和代码高亮等功能都失效了,按 F12 发现原因是引自 cdn.jsdelivr.net
的字体资源、CSS 和 JS 文件都无法访问,挂梯子后页面恢复正常。
此内容受密码保护。如需查阅,请在下列字段中输入您的密码。
Matplotlib 的 pcolor
函数能够绘制由一个个四边形(quadrilateral)单元构成的网格数据的彩色图像,相比绘制等值填色图的 contourf
函数,不会产生过度的平滑效果,能忠实反映像元的数值大小,因而在科学可视化中也很常用。本文并不打算介绍该函数的种种,只想着重讨论网格数据的显示效果、shading
参数发挥的作用,以及 pcolor
和 pcolormesh
这对双胞胎间的差异。本文基于 Matplotlib 3.3.4。
pcolor
全名 pseudo color,即伪彩色。函数签名为
pcolor([X, Y], C, **kw)
其中 X
和 Y
分别是网格的横纵坐标,C
是网格单元内变量的数值。之所以称之为“伪”,是因为 pcolor
并不像 imshow
那样直接用 RGB(A) 数组表示颜色,而是将 C
的数值归一化之后,在一个颜色查找表中查找对应的颜色,进而用颜色差异表现数值大小(原理详见 Matplotlib 系列:colormap 的设置)。C
数组的形状为 (ny, nx)
,X
和 Y
的形状要比 C
大上一圈,即 (ny + 1, nx + 1)
,ny
在前表示纵坐标会随数组的行号变动,nx
在后表示横坐标会随数组的列号变动。pcolor
对网格数据的显示效果如下图所示
今天改程序时脑海里突然蹦出这个问题,更宽泛地说,是修饰词或者偏正结构的先后顺序,例如
upper_ax
和 bottom_ax
,ax_upper
和 ax_bottom
。start_date
和 end_date
,date_start
和 date_end
。一旦开始疑惑,焦虑便随之而来:哪一种比较好呢?我之前的代码里好像两种写法都出现过,有没有什么现成的规范可以参考呢?越想越不痛快,所以赶紧上网找点前人经验来背书。意外的是,网上大部分文章都在讨论如何取有意义的变量名,而关于这个问题的寥寥无几,也许是因为太细节、太“语法”了?现归纳两篇我看过的帖子以供参考。
首先在 stack overflow 上找到了一模一样的提问:是用 left_button
和 right_button
,还是 button_left
和 button_right
更好呢?提问者自己觉得前者符合英文语序,读起来更加自然,而后者强调了变量的重点在于按钮,而左和右是额外的补充信息。有评论指出后者在 IDE 里更方便,因为你一键入 button
,就会自动联想出所有带后缀的版本。这也挺符合人的联想过程,我们肯定是先想到“我要找按钮”,再明确具体要什么样的按钮。当然也有评论给出了经典的废话:与其纠结哪一种约定,任选一种并在项目里维持一致性最重要!好家伙,要是我如此豁达还会来搜这种鸡毛蒜皮的问题吗?
本文研究一个小问题:如何将长度为 N
的列表等分为 n
份?该问题的示意图如下
N
除以 n
的商为 size
,余数为 rest
,数值满足 0 <= rest < n or size
(除法规则请见 Python 系列:除法运算符)。当 N
是 n
的倍数时,rest = 0
,列表正好被等分为 n
份,每份含 size
个元素;而当 N
不是 n
的倍数时,rest > 0
,按前面的分法会剩下 rest
个元素。对于后一种情况来说并不存在真正的等分,只能说希望尽量等分,问题的重点也落在了如何处理这 rest
个元素上。
Matplotlib 中用箭头表示风场或电磁场等矢量场时需要用到 quiver
方法,据字典,quiver 一词的意思是颤动、颤抖或箭袋,貌似也就最后一个意思跟箭头搭得上边。相比于其它画图方法,quiver
的参数又多又容易混淆,所以本文将以图解的方式逐一介绍。这些参数按功能可分为三种:控制箭头位置和数值的、控制箭头长度和角度的,以及控制箭头尺寸和形状的。下面会按照这个分组顺序来解说。本文代码基于 Matplotlib 3.3.4。
笔者初次使用 MODIS 二级气溶胶产品时,一下就被密密麻麻一堆变量搞懵了:很多变量名字里带个 Optical_Depth
,这我能猜到,就是气溶胶光学厚度,但各种 Corrected
、Effective
、Best
、Average
、Small
、Large
的前后缀鬼知道是什么。看过的论文基本不说具体用的哪个变量,各种教程也不会告诉你这些亲戚间的差异,似乎这件事一点也不重要。本着 know your data 的心态,我在翻阅了 MODIS 的几个官网后总算从反演的原理中稍微体会到了这些前后缀的意义。现将学习经验总结归纳如下,希望能帮到和我一样疑惑的小伙伴。同时本文还会提供简单的 Python 示例代码。
如果嫌正文太啰嗦,可以直接跳到文末的总结部分,那里直接给出了各个变量的使用建议。
这是 @skotaro 在 2018 年发布的一篇关于 Matplotlib Artist 的通俗易懂的介绍,很适合作为官方教程的前置读物,故翻译于此,原文标题是 “Artist” in Matplotlib - something I wanted to know before spending tremendous hours on googling how-tos.。文中绝大部分链接都重定向到了最新版本的 Matplotlib 文档,还请读者注意。
毫无疑问 Python 里的 matplotlib 是个非常棒的可视化工具,但在 matplotlib 中慢慢调细节也是件很烦人的事。你很容易浪费好几个小时去找修改图里细节的方法,有时你连那个细节的名字也不知道的话,搜索起来会更加困难。就算你在 Stack Overflow 上找到了相关的提示,也可能再花几个小时根据需求来修改它。不过,只要了解了 matplotlib 图的具体组成,以及你可以对组件执行的操作,就能避开这些徒劳无益的工作。我想,我跟你们中的大多数人一样,做图时遇到的困难都是靠读 Stack Overflow 上那些 matplotlib 高手们的答案来解决的。最近我发现 官方的 Artist
对象教程 信息很丰富,有助于我们理解 matplotlib 的画图过程并节省调图时间1。本文里我会分享一些关于 matplotlib 里 Artist
对象的基本知识,以避免浪费数小时调图的情况出现。
之前我在 Cartopy 系列:从入门到放弃 一文中定义了这样一个函数
def set_map_extent_and_ticks(
ax, extent, xticks, yticks, nx=0, ny=0,
xformatter=LongitudeFormatter(),
yformatter=LatitudeFormatter()
):
...
几年前曾写过 Cartopy 系列:从入门到放弃,但现在来看还是遗漏了不少细节,比如初学者可能会遇到以下问题
本文将会用坐标变换的思想来解答以上问题,希望能给读者一些实用的启示。本来应该把这些内容写到入门教程里的,但可能会太长,所以现在单独成篇。文中的讨论主要针对最常用的 Plate Carrée 投影,其它投影需要读者自己测试。代码基于 Cartopy 0.18.0,虽然现在已经更新到 0.20.0 了,但基本思想是一致的。