APP下载

Python Plotly极速三维作图二例

2022-07-21牟晓东

电脑报 2022年27期
关键词:赋值绘图图表

牟晓东

在进行开源硬件编程时经常要对获取到的实验数据进行实时或后期数据可视化分析,一般情况下我们都是在Python编程时先导入matplotlib模块或Seaborn模块,然后使用其中的pyplot、displot等子模块与命令再结合numpy和pandas进行各种图表的绘制。类似于matplotlib的底层可视化库虽然图表资源丰富且可定制性较强,但作为静态的绘图模块,matplotlib的书写代码量较大,操作稍显繁琐,此时建议大家可尝试一下能够同时支持二维和三维作图的Plotly,它是基于JavaScript的动态绘图模块,能够通过简单的几行代码就绘制出非常漂亮的图表,便于与他人进行共享,在此以绘制三维的点与线和函数的三维面为例进行展示:

首先,运行Jupyter Notebook (anaconda3),导入相关的模块:“import  plotly.graph_objects as go”“import pandas as pd”;接着,通过“data = pd.read_csv('data/3d-points.csv')”对准备好的csv数据文件进行读取加载,再通过“data.head()”进行前五行数据的显示——该csv文件中的数据只有X、Y和Z三列,每一行的三个数据即对应一个三维坐标点,如(1,1,1)、(4,2,1)等,共300个点;然后建立变量line,为其赋值为“go.Scatter3d(x= data['X'],y=data['Y'],z=data['Z'])”,将参数中的三维坐标点与data中读取csv文件中的各个三维坐标点进行对应;再建立变量fig,赋值为“go.Figure(line)”,最后通过“fig.show()”进行绘图输出。

点击“运行”按钮后就会看到生成了三维的点与线图(如图1),此时可通过鼠标的左右上下拖动对图进行各个角度的动态展示,也可以推拉滚轮来缩放。同时,在图的右上方区域还提供了一系列小工具,实现图片的保存、缩放与移动等功能。

如果要绘制三维面的话,比如想看一下某个函数在三维空间中“长”什么样子,可以先构造出每个二维坐标面中的均匀“点阵”,再将对应的高度值进行叠加即可。以函数“z=x的平方加y的平方”为例,仍然是在Jupyter中先导入模块:“import  plotly.graph_objects as go”、“import numpy as np”;接着建立x和y两个变量,分别为其赋值为“x = np.arange(-6,7)”“y=np.arange(-6,7)”,对应的数据范围是从-6到6(中间包括0)共13个整数;然后,建立变量xv和yv,并同时进行赋值:“xv,yv = np.meshgrid(x,y)”,得到两个“矩阵”,此時可运行代码分别查看一下xv和yv的值;接下来再建立变量z,赋值为“xv**2 + yv**2”,即函数“z=x的平方加y的平方”的Python表达方式,此时仍然可以查看变量z的矩阵数据(如图2)。

与绘制三维的点和线类似,建立变量surface并进行赋值“go.Surface(x=xv,y=yv,z=z)”,同样是让参数x、y和z与上面的xv、yv和z进行三维坐标点的一一对应;最后,通过“fig = go.Figure(surface)”和“fig.show()”进行该函数的三维面显示输出(如图3)。

Plotly的操作难度确实不大,而且各种图片的显示效果都非常不错,大家不妨一试。

猜你喜欢

赋值绘图图表
来自河流的你
“禾下乘凉图”绘图人
L-代数上的赋值
强赋值幺半群上的加权Mealy机与加权Moore机的关系*
基于HTML5 Canvas绘图技术应用
双周图表
双周图表
双周图表
图表
利用赋值法解决抽象函数相关问题オ