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多进程编程下线程之间变量的共享问题
May 05 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
Python中生成Epoch的方法
Apr 26 Python
Python yield 使用方法浅析
May 20 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
python实现随机漫步算法
Aug 27 Python
python在回调函数中获取返回值的方法
Feb 22 Python
numpy linalg模块的具体使用方法
May 26 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
浅谈Python数学建模之整数规划
Jun 23 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/01 无线电
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
详解JS面向对象编程
2016/01/24 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
python基础教程之类class定义使用方法
2014/02/20 Python
python中List的sort方法指南
2014/09/01 Python
Djang中静态文件配置方法
2015/07/30 Python
python最长回文串算法
2018/06/04 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
python实现人机五子棋
2020/03/25 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
编程实现去掉XML的重复结点
2014/05/28 面试题
C#可否对内存进行直接的操作
2015/02/26 面试题
小学安全教育材料
2014/02/17 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
科研课题实施方案
2014/03/18 职场文书
党支部三会一课计划
2014/09/24 职场文书
打架检讨书范文
2015/01/27 职场文书
大专护理专业自荐信
2015/03/25 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python
使用Redis实现分布式锁的方法
2022/06/16 Redis