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查看多台服务器进程的脚本分享
Jun 11 Python
总结Python编程中三条常用的技巧
May 11 Python
Python模拟登陆实现代码
Jun 14 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
python实现堆和索引堆的代码示例
Mar 19 Python
python实现Windows电脑定时关机
Jun 20 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
python 从list中随机取值的方法
Nov 16 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
php Mysql日期和时间函数集合
2007/11/16 PHP
php输入流php://input使用浅析
2014/09/02 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
用Webpack构建Vue项目的实践
2017/11/07 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
JavaScript实现京东快递单号查询
2020/11/30 Javascript
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
python speech模块的使用方法
2020/09/09 Python
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
开学典礼感言
2014/02/16 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
市场营销工作计划书
2014/09/15 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang