本文简单介绍使用python中的seaborn模块绘制精美的科技图表。
我前面写了一堆使用ImageJ和Python的教程,input是成像数据,output通常是一张数据表格。但发表论文时需要绘制科技图表,所以这套数据分析流程还存在 gap。有了提炼后的统计数据表格,大家可以使用自己熟悉的方式去绘制图表,比如 OriginLab 或者 GraphPad 之类的。
Python 代码绘制图表与 OriginLab 等基于用户操作界面的工具相比,具有非常高的灵活性,可以更好地控制图表的创建过程,获得高度自定义的精美图表。还具有良好的可重复性,Python 脚本可以轻松地被再次运行或共享给他人,确保结果的一致性和可重现性。但 python 作图的缺点就是要会编程。假如你已经较好地掌握了 python 编程,那么进一步使用 python 作图就是顺其自然的过程。
为了大家不走弯路,我这里先介绍 seaborn 模块用于绘制一些基础又精美的图表。
seaborn 作图模块高度适配 pandas 模块的 DataFrame 对象,这也是前面我通常会把各种分析结果整理到 DataFrame 的原因(另一个原因是方便保存为电子表格文件发给合作者作图)。事实上除了 seaborn,其它主流的一些作图模块(如 plotly)都很好地支持以 DataFrame 作为输入。因此,我这里可以先介绍下 DataFrame。
从我个人不专业的角度介绍一下:数据表是一类常见的数据结构,具备行列结构。但是跟矩阵不同的是,数据表每一行可以代表不同的对象(或者说某一次测量),而每一列可以代表不同的属性(该次测量的不同观测项)。举个例子:我们对班级的同学进行体检信息统计,某一行就是特定某个同学,某一列就是身高,体重这种属性。
了解数据表的这个特点,一方面在整理数据的时候,我们可以更加规范,另外一方面也能够更加方便地作图。
我们可以分析下seaborn中一个简单示例:
其对应的代码如下:
import seaborn as sns
sns.set_theme(style="ticks", palette="pastel")
# Load the example tips dataset
tips = sns.load_dataset("tips")
# Draw a nested boxplot to show bills by day and time
sns.boxplot(x="day", y="total_bill",
hue="smoker", palette=["m", "g"],
data=tips)
sns.despine(offset=10, trim=True)
其中 tips 就是一个 DataFrame,然后在作图(sns.boxplot
命令) 时,x="day"
就是直接指定某一列的名称(column name),以此类推,参数 y 和 hue 都是指定数据表中的某一列。hue在这里主要是分组的作用,然后不同的分组可以使用 palette(调色板)来控制颜色,注意调色板颜色数据量要和分组数量一致。sns.despine
命令就是让坐标轴分离。而整个作图的基本样式,这里使用了 sns.set_theme
来调用了内置的一套设置,自动设定线宽,字体和大小等等。
作图基本样式可以自定义,以适配自己的作图风格或者需求。这里我把自己多年使用的一套自定义样式分享出来:
通过
sns.set_context
命令可以精确地设置图表的各种线宽线长和字体字号,保证你后面所有作图的结果都是一致的。然后具体作图时,我习惯于使用 matplotlib 进行更基础的一些控制(因为seaborn其实只是在matplotlib基础上的高级封装)。例如我绘制 bar 图常见的作图代码模板如下:简单解释一下:
- 共有四种样品需要比较面积,每种样品指定一种颜色
- 使用
plt.figure
控制整体图表的大小 sns.barplot
绘制bar图,通过参数ci
指定 errorbar 引用SD值,并通过capsize
,errwidth
,errcolor
来控制 errorbar的样式- 通过
alpha
控制 bar 图的透明度 - 通过
order
控制 bar 的顺序 - 通过
plt.ylabel
修改 y坐标轴标签 - 通过
plt.xticks
中的rotation
控制x轴ticks的旋转 plt.tight_layout
自动完成紧凑排版plt.savefig
中保存为svg
格式的矢量图,方便放到矢量作图软件(如 Adobe Illustrator )中与其它论文图表整合排版
其实不同的图表类型,还有各种不同控制命令和方法,这些都可以在seaborn 或者 matplotlib 的 gallery 中查看类似的图表的示例来查看。另外也可以咨询ChatGPT之类的AI,它们在生成绘制常规图表的python代码方面还是很给力的。
此处评论已关闭