matplotlib可视化系列之【排版】

排版虽然只是绘图中的辅助功能,但是好的排版能够提高图形的表现力。
让人一眼看出图形要表达的内容和数据,而不用去费力的睁大眼睛去图中查找。

如果说 matplotlib的坐标系统,各种基础元素,包括柱状图,折线图,散点图等它的硬实力,
那么,排版就是 matplotlib 的软实力,结合排版,能让分析结果给人一个良好的第一印象,增强别人对分析结果的信任。

排版是个很大的话题,涉及很多细节,这里只从三个方面来改善排版,相比于直接绘制图形,先改善这三个方面,就能极大提高可视化的清晰度。

层次

绘图和写文章一样,平铺直叙对读者很难有吸引力,跌宕起伏的情节才是吸引读者的法宝。
绘图时,仅仅将各个元素展示出来就像一篇记录流水账的文章,索然无味。

通过调整元素的位置,大小和粗细,也可以让图形展示出完全不同的效果,比如下面2个图:
image.png
代码参考:https://github.com/rougier/scientific-visualization-book/blob/master/code/typography/typography-matters.py

相对于第一个图,第二个图通过调整 matters 的大小和位置,以及坐标轴刻度的大小和粗细等,明显让人感觉到第二个图更加的精致。

字体

matplotlib 支持调整绘图中的字体,选择那种字体没有明确的原则,可以根据显示的内容,多试试几种字体,看看哪种看的更加顺眼。

比如,对于数学公式来说,因为显示的内容比较复杂,清晰度比显示普通文字更加重要。
下面是几种字体对数学公式的显示,体会体会其中的差别。
代码参考:https://github.com/rougier/scientific-visualization-book/blob/master/code/typography/typography-math-stacks.py
image.png

一般会选择和图形中主要字体类似的字体来显示数学公式。

易辨认性

易辨认是很抽象的概念,具体来说,先做到两点。
一是能从背景中清晰的看到文字。比如下面的示例:
image.png
上面的图形中都有 Read me 几个字,第三排给文字加上背景,第四排给文字加了描边。
这样明显比前两排的文字显示清晰很多。

另一个提高易辨认性的方法则是和图形结合的文字可以随着图形的变换来显示,这样可以一眼看出数据表示的是图形哪部分的内容,比如:
image.png

图中的文字随着等高线来显示,不同说明就知道数值代表的是等高线的数据。

但是文字的比例和图形的比例一样,看上去文字有点偏小,
而且数据都挤在一起,显示在等高线的同样位置。需要仔细辨认一下才能看出各个数值。

下面的图调大了显示文字,并且让数值在等高线上错开显示,一下就提高了整个图形的易辨认性。
image.png
大家可以体会下2个图的差别。

代码参见:https://github.com/rougier/scientific-visualization-book/blob/master/code/typography/typography-text-path.py

总结

排版的细节如果考究起来是永无止境的,对于完美排版的看法也是见仁见智,并没有完全统一的标准。

这里讨论的几个点主要从提高清晰度的角度出发,通过尽量简单的几个改进,让我们绘制的图形更加的专业。

posted @ 2022-06-12 11:09  wang_yb  阅读(234)  评论(0编辑  收藏  举报