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数据结构之二叉树的统计与转换实例
Apr 29 Python
python列表操作之extend和append的区别实例分析
Jul 28 Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 Python
Python 基础知识之字符串处理
Jan 06 Python
Python引用传值概念与用法实例小结
Oct 07 Python
windows下添加Python环境变量的方法汇总
May 14 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
详解pandas的外部数据导入与常用方法
May 01 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
Python通过Schema实现数据验证方式
Nov 12 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
星际实力自我测试
2020/03/04 星际争霸
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
利用 window_onload 实现select默认选择
2006/10/09 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
HTML页面登录时的JS验证方法
2014/05/28 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
python模拟登陆阿里妈妈生成商品推广链接
2014/04/03 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
护士自我鉴定范文
2013/10/06 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书