Python使用pylab库实现画线功能的方法详解


Posted in Python onJune 08, 2017

本文实例讲述了Python使用pylab库实现画线功能的方法。分享给大家供大家参考,具体如下:

pylab 提供了比较强大的画图功能,但是函数和参数都比较多,很容易搞混。我们平常使用最多的应该是画线了。下面,简单的对一些常用的划线函数进行了封装,方便使用。

# -*- coding: utf-8 -*-
import pylab
import random
class MiniPlotTool :
  '''
  A mini tool to draw lines using pylab
  '''
  basecolors = ['red','green','yellow','blue','black','cyan','magenta']
  def __init__(self, baseConfig) :
    self.figsize = baseConfig.get('figsize',None)
    self.axis = baseConfig.get('axis',None)
    self.title = baseConfig.get('title','NoName')
    self.ylabel = baseConfig.get('ylabel','NoName')
    self.grid = baseConfig.get('grid',False)
    self.xaxis_locator = baseConfig.get('xaxis_locator',None)
    self.yaxis_locator = baseConfig.get('yaxis_locator',None)
    self.legend_loc = baseConfig.get('legend_loc',0)
    if self.figsize != None :
      pylab.figure(figsize = self.figsize)
    if self.axis != None :
      pylab.axis(self.axis)
    pylab.title(self.title)
    pylab.ylabel(self.ylabel)
    ax = pylab.gca()
    pylab.grid(self.grid)
    if self.xaxis_locator != None :
      ax.xaxis.set_major_locator( pylab.MultipleLocator(self.xaxis_locator) )
    if self.yaxis_locator != None :
      ax.yaxis.set_major_locator( pylab.MultipleLocator(self.yaxis_locator) )
    self.lineList = []
    self.id = 1
  def addline(self, lineConf) :
    self.lineList.append((self.id, lineConf))
    self.id += 1
    return {'id' : self.id - 1}
  def removeline(self, lineId) :
    for i in range(len(self.lineList)) :
      id, conf = self.lineList[i]
      if id == lineId :
        del self.lineList[i]
        break
    else :
      return {'status' : -1}
    print len(self.lineList)
    return {'status' : 0}
  def __parselineConf(self, lineConf) :
    X = lineConf['X']
    Y = lineConf['Y']
    marker = lineConf.get('marker',None)
    color = lineConf.get('color', random.choice(MiniPlotTool.basecolors))
    markerfacecolor = lineConf.get('markerfacecolor',color)
    label = lineConf.get('label','NoName')
    linewidth = lineConf.get('linewidth',1)
    linestyle = lineConf.get('linestyle','-')
    return X, Y, marker, color, markerfacecolor, label, linewidth, linestyle
  def plotSingleLine(self, lineConf):
    X, Y, marker, color, markerfacecolor, label, linewidth, linestyle = self.__parselineConf(lineConf)
    pylab.plot(X, Y, marker = marker, color = color, markerfacecolor = markerfacecolor, label=label, linewidth = linewidth, linestyle = linestyle)
    pylab.legend(loc = self.legend_loc)
  def plot(self) :
    colors = [MiniPlotTool.basecolors[i % len(MiniPlotTool.basecolors)] for i in range(len(self.lineList))]
    for i in range(len(self.lineList)) :
      id, conf = self.lineList[i]
      if conf.get('color',None) :
        conf['color'] = colors[i]
      X, Y, marker, color, markerfacecolor, label, linewidth, linestyle = self.__parselineConf(conf)
      pylab.plot(X, Y, marker = marker, color = color, markerfacecolor = markerfacecolor, label=label, linewidth = linewidth, linestyle = linestyle)
    pylab.legend(loc = self.legend_loc)
  def show(self) :
    pylab.show()
if __name__ == '__main__' :
  #test
  baseConfig = {
    #'figsize' : (6,8),
    #'axis': [0,10,0,10],
    #'title' : 'hello title',
    #'ylabel' : 'hello ylabel',
    'grid' : True,
    #'xaxis_locator' : 0.5,
    #'yaxis_locator' : 1,
    #'legend_loc' : 'upper right'
  }
  tool = MiniPlotTool(baseConfig)
  X = [ i for i in range(10)]
  Y = [random.randint(1,10) for i in range(10)]
  Y2 = [random.randint(1,10) for i in range(10)]
  lineConf = {
    'X' : X,
    'Y' : Y
    #'marker' : 'x',
    #'color' : 'b',
    #'markerfacecolor' : 'r',
    #'label' : '222',
    #'linewidth' : 3,
    #'linestyle' : '--'
  }
  lineConf2 = {
    'X' : X,
    'Y' : Y2,
    'marker' : 'o',
    'color' : 'b',
    'markerfacecolor' : 'r',
    'label' : '222',
    'linewidth' : 3,
    'linestyle' : '--'
  }
  #tool.plotSingleLine(lineConf)
  print tool.addline(lineConf)
  print tool.addline(lineConf2)
  #print tool.removeline(1)
  tool.plot()
  tool.show()

运行效果图如下:

Python使用pylab库实现画线功能的方法详解

附:引用自:https://sites.google.com/site/guyingbo/matplotlib%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0

线属性:

颜色(color 简写为 c):

蓝色: 'b' (blue)
绿色: 'g' (green)
红色: 'r' (red)
蓝绿色(墨绿色): 'c' (cyan)
红紫色(洋红): 'm' (magenta)
黄色: 'y' (yellow)
黑色: 'k' (black)
白色: 'w' (white)
灰度表示: e.g. 0.75 ([0,1]内任意浮点数)
RGB表示法: e.g. '#2F4F4F' 或 (0.18, 0.31, 0.31)
任意合法的html中的颜色表示: e.g. 'red', 'darkslategray'
线型(linestyle 简写为 ls):

实线: '-'
虚线: '--'
虚点线: '-.'
点线: ':'
点: '.'
点型(标记marker):

像素: ','
圆形: 'o'
上三角: '^'
下三角: 'v'
左三角: '<'
右三角: '>'
方形: 's'
加号: '+'
叉形: 'x'
棱形: 'D'
细棱形: 'd'
三脚架朝下: '1'(就是丫)
三脚架朝上: '2'
三脚架朝左: '3'
三脚架朝右: '4'
六角形: 'h'
旋转六角形: 'H'
五角形: 'p'
垂直线: '|'
水平线: '_'
gnuplot 中的steps: 'steps' (只能用于kwarg中)
标记大小(markersize 简写为 ms):

markersize: 实数
标记边缘宽度(markeredgewidth 简写为 mew):

markeredgewidth:实数
标记边缘颜色(markeredgecolor 简写为 mec):

markeredgecolor:颜色选项中的任意值
标记表面颜色(markerfacecolor 简写为 mfc):

markerfacecolor:颜色选项中的任意值
透明度(alpha):

alpha: [0,1]之间的浮点数
线宽(linewidth):

linewidth: 实数

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
python计算两个数的百分比方法
Jun 29 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
Python Flask框架扩展操作示例
May 03 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
Jun 21 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
python队列原理及实现方法示例
Nov 27 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
Oct 15 Python
浅析Python的命名空间与作用域
Nov 25 Python
Python实现对象转换为xml的方法示例
Jun 08 #Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 #Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 #Python
Python3 socket同步通信简单示例
Jun 07 #Python
Python实现获取磁盘剩余空间的2种方法
Jun 07 #Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 #Python
Python中音频处理库pydub的使用教程
Jun 07 #Python
You might like
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
PHP错误处理函数
2016/04/03 PHP
php实现的二分查找算法示例
2017/06/20 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
JavaScript 学习初步 入门教程
2010/03/25 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
2019/05/07 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
js实现时钟定时器
2020/03/26 Javascript
js面向对象封装级联下拉菜单列表的实现步骤
2021/02/08 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
python使用udp实现聊天器功能
2018/12/10 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
python 切换root 执行命令的方法
2019/01/19 Python
python爬虫如何解决图片验证码
2021/02/14 Python
.NET常见笔试题集
2012/12/01 面试题
写演讲稿要注意的六件事
2014/01/14 职场文书
自考生自我评价分享
2014/01/18 职场文书
师范学院教师自荐书
2014/01/31 职场文书
企业内部培训方案
2014/02/04 职场文书
《假如》教学反思
2014/04/17 职场文书
护士业务学习心得体会
2016/01/25 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers