Data Visualization Using PyNanoLab
PyNanoLab通过matplotlib绘图库构建了一套完整的绘图工具,结合pandas构建的表格工具,实现了matplotlib绘图库的gui交互式绘图,可以通过gui界面实现对图形任意参数的设置、保存和重载,无需任何代码。目前已实现曲线图、散点图、柱状图、分布图、地形图等多种图形的数据可视化。
绘图框架
)
如上图所示,matplotlib 的2D 绘图分为三个层次:
- Figure :
Figure 表示一张画布上的绘图区域,一张画布可以有一个或多个,相同或者不同类型的坐标系,是所有绘图元素的顶级容器。一般通过plt.Figure()
创建一张图片。 - Axes:
Axes表示一张图片上的坐标系系统,在一张画布上可以同时有多个坐标系,每个坐标系包含x、y轴,每一个坐标轴上又有对应的ticks,tickslable和坐标轴标签。PyNanoLab 的所有2D图使用同一类型的坐标系系统,可以控制所有坐标轴属性的设置。 - Artist:
Artist表示坐标系上具体绘制的对象,例如曲线、散点、图形等,使用不同的Artist最终就可以绘制不同类型的数据图。
PyNanoLab 构建了统一的图形设置界面,自动为每一种Artist生成独立的设置界面,实时修改图形的参数:
Figure对象设置:
Figure设置面板主要设置图像的整体参数,包括图片的尺寸和背景颜色。subplots控制坐标系与图形边框的距离,其参数定义为左下角坐标为(0,0)右上角为(1,1),设置的参数取0-1之间的绝对值。当有多个坐标系存在时,可以使用width_ratios参数设置多个坐标系宽度的比值。
Axes对象设置:
Axes对象主要控制绘图的坐标系,PyNanoLab的设置面板主要包括Frame和XY坐标轴。其中Frame面板控制坐标轴的整体设置,XY坐标轴具有相同的设置接口,主要控制坐标轴的显示、tick、ticklabels和坐标轴标签。
(1). Frame设置面板:
如图所示,Frame面板主要包括:
Title: 设置该坐标系的名称,及其对应的字体、颜色和坐标系的背景色, 对应代码:ax.set_title(**parm)
。PyNanoLab 图形设置窗口的所有文本都支持Latex 语法绘制复杂的数学公式,只需要在关键字两个"$$"之间使用Laxtex 语法即可,具体可参考文档。
Spines: 设置坐标系的边框的显示、位置,线宽和线的类型。其中复选框设置是否显示该该边框;下拉列表和对应的值设置边框在坐标系中的位置。outward:表示边框距离数据区域以外的像素点数。data:表示对应坐标系上的值,例如将上、右边框隐藏,将下和左边框选择为data,值设为0,就可以构建一个始于原点的标准空间坐标系系统。axes:表示在坐标系中的比例(0-1),例如设置为0.5 就可以将边框置于坐标系中间。具体可参考文档。
Legend: 设置图例,图例将会根据Artist的类型自动生成,包括是否显示、位置、行列数、是否显示阴影框、字体和颜色。其中选择best将会根据图形自动选择最佳的位置,Legend也可以直接使用鼠标拖曳放置位置。其他loc参数可参考文档。
Grid: 设置网格,包括是否显示、网格线宽、曲线类型和颜色。对应代码ax.grid(**parm)
.
(2). 坐标轴设置面板:
Xlabel: 设置坐标轴标签的文字、位置、字体、颜色和距离,支持latex语法,该标签使用表格的name和unit参数生成,格式为:"name (unit)".
Xlim: 设置坐标轴的数据范围,反转该值可以反转坐标轴。
Tick style: 设置如图中橙色的tick线的位置、风格、颜色、宽度、长度和距离。
Locator: 设置坐标轴刻度的位置和风格,如图所示,具体可参考文档
-
"AutoLocator": 自动设置
-
"LinearLocator": 线性定位器,可以设置固定个数的刻度,配合xlim参数使用可以准确确定刻度。
-
"MultipleLocator": 线性定位器,可以设置数字是几的倍数,例如:设置2,则选择坐标范围内所有2的倍数显示。
-
"MaxNLocator": 线性定位器,自动设置,控制最多显示多少个刻度。
-
"LogLocator": 对数刻度,
-
"SymmetricalLogLocator": 双对数刻度。
-
"NullLocator": 隐藏所有刻度
-
"StrCategoryLocator": 字符串刻度,根据图形类型自动生成,不可设置, 例如以字符串为X轴的柱状图。
-
"FixedLocator": 固定坐标,根据图形类型自动生成,不可设置。
Formater: 设置坐标轴刻度标签文字的显示风格,如图所示,具体可参考文档。
- "ScalarFormatter": 数字刻度,默认格式。
- "NullFormatter": 隐藏所有坐标
- "StrMethodFormatter": 格式化字符串刻度, 使用python的format格式化字符串语法 x变量可以引用刻度的数值。例如:原始数字30.0 使用 "# {x:.3} mg ",可以将当前刻度的数字格式化为 "#30.000 mg"
- "EngFormatter": 类似于格式化字符串刻度。
- "PercentFormatter": 百分比显示刻度
- "StrCategoryFormatter": 字符串刻度标签,根据图形类型自动生成,不可设置。
- "LogFormatterSciNotation": 对数字符串,显示底数和指数,
- "LogFormatterMathtext":对数字符串,只显示指数,
- "LogFormatterExponent": 对数字符串, ,只显示自然指数,
- "FuncFormatter": 自定义函数刻度字符串, 目前只添加了scaled 函数,显示为当前值*设置值,用于缩放坐标轴 。
- "FixedFormatter": 固定左边,自动生成。
至此,axes的设置完成,可以使用 apply to all axes 将当前坐标系的参数应用到该图的所有坐标系。
图形绘制:
1. 曲线图:
2. 饼形图:
3. 散点图:
3. 柱状图:
4. 分布图:
分布图类为一维图,因此通常无需设置数据标签(加权直方图)。
5. 热图:
6. seaborn:
使用seaborn绘图库绘图,需要特殊组织的Long-form 表格数据才能发挥最大优势。通常行数据为一个采样的获得不同类型,例如每一行是一个采样对象的名称、年龄、身高体重等数据。
7. 3D图:
目前只适合绘制简单的3D图
8. 添加文字注释和修饰图形:
PyNanoLab支持在任意位置添加文字,使用鼠标双击即可在坐标系中添加文本,一类是普通文本,一类是带箭头的注释文本。
使用右键菜单,可以在画布上添加直线和矩形方框。文本和修饰图形删除方法:鼠标左键选中保持,按DEL键删除。
图片的导出、保存和重载:
PyNanoLab 在每个绘图窗口上都有导出按钮,可以导出单个图片,如下图所示:
同时,也可以在Figure items窗口勾选要导出的图片批量导出。也可以导出整个图片文件夹。其中。.pnlfig 格式是PyNanoLab的私有格式,可以重新导入到PyNanoLab中还原上次的绘图设置;也可以将所有绘图和数据一起保存在工程文件中(推荐)。
上述所有图像已内置于PyNanoLab的所有版本中,点击工具栏的工具→打开内置模型按钮即可预览所有内置绘图。
此外,工具栏的工具→设置绘图风格工具,也可以为PyNanoLab设置默认的绘图风格。
相较于Original Lab等传统软件,PyNanoLab 绘图更简单直接,绘图风格更美观,且永久免费,欢迎使用。