东莞网站设计出名 乐云践新,wordpress中修改链接地址,太原网络广告公司,广州 门户文章目录 辅助坐标轴功能实现代码优化源代码 Python绘图系统#xff1a;
前置源码#xff1a; Python打造动态绘图系统#x1f4c8;一 三维绘图系统 #x1f4c8;二 多图绘制系统#x1f4c8;三 坐 标 轴 定 制#x1f4c8;四 定制绘图风格 #x1f4c8;五 数据生成导入… 文章目录 辅助坐标轴功能实现代码优化源代码 Python绘图系统
前置源码 Python打造动态绘图系统一 三维绘图系统 二 多图绘制系统三 坐 标 轴 定 制四 定制绘图风格 五 数据生成导入六 三维动态演示坐标列表进阶导出数据系统菜单批量文件导入辅助坐标轴绘图类型进阶坐标映射八种绘图函数坐标和绘图函数设置所有绘图函数强大的绘图系统
这是本系列博客的第28篇从功能来说这个小巧的绘图系统应该算是比较完备了。
辅助坐标轴功能实现
之前在AxisList中实现了辅助坐标轴的添加和删除功能但只是实现了交互逻辑没有实现真正的辅助功能。
这个功能也很容易实现只需仿造getXYZ设计一个getABC
def getABC(self):return [key in self.ABC if key in self.afs]然后更改readPython函数因为可能会输入的变量太多再用这种readPython(self, tNone, xNone, yNone, zNone)的写法显然就不合适了。所以将其改为
def readPython(self, dct):locals().update(dct)self.data eval(self.srcText.get())return self.data与此同时一切参与过dct参数传递的函数其**txty的两个星号都要去掉写成类似下面的形式
def setData(self, dataNone, dct{}):if self.mode.get() 序列:return self.getArray()elif self.mode.get() 导入:return self.loadData(data)else:return self.readPython(dct)最后更改DrawSystem中的readDatas函数
def readDatas(self, al):dct {}data {}if al.hasTimeAxis():data[t] al.setData(t)dct[t] data[t][self.tIndex]for flag in al.getABC():data[flag] al.setData(flag, dctdct)dct[flag] data[flag]for flag in al.getXYZ():data[flag] al.setData(flag, dctdct)dct[flag] data[flag]return data最后效果如下 代码优化
至此本阶段希望实现的功能就实现得七七八八了接下来要对代码做一些优化包括以下几个方面
代码清理
由于DrawType继承了更加全面的设置功能所以原本需要调用的函数现在并不需要调用了从而产生了大量不需要的函数这个就自行检测把没有调用的函数都删掉就对了。
另外全局的导入数据功能目前处于养老状态其具体代码估计以后也不能用了所以接口保留但代码删除。
接口优化
首先AxisList有一个types参数这个参数原本是要传入绘图类型的现在绘图类型都在DrawType中所以这个参数可以取消。
DrawType的传入参数里有一个回调函数默认是None这会导致报错所以将其默认值改为lambda x:x。
常量、变量和函数名称
AxisFrame中的坐标轴设置模式目前有四种即序列化, “源代码”, “外部导入”, “无数据”感觉这种命名不太规整故修改为
“序列”, “源码”, “导入”, “无数据”
这四个参数用的次数太多所以改动的时候需要细致按理说这些应该写成变量这样的话也方便国际化考虑到本身我也没想把这个项目写太长所以就算了。
而文字长度发生变化使得combobox的宽度就显得太长了所以再调整一下布局。
源代码
目前四个文件的总代码行数大概800行左右我的目标是用1000行代码实现一个功能完备且强大的绘图系统。接下来希望实现不同坐标轴的关联以实现插值、拟合等进阶功能并接入几个用于示例的全局优化代码进一步提高程序的实用性。