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 25 Python
Python跳出循环语句continue与break的区别
Aug 25 Python
Python实现简单的代理服务器
Jul 25 Python
python Socket之客户端和服务端握手详解
Sep 18 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 Python
pycharm 配置远程解释器的方法
Oct 28 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
Python简易版停车管理系统
Aug 12 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
Python如何实现Paramiko的二次封装
Jan 30 Python
用Python爬虫破解滑动验证码的案例解析
May 06 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
php4与php5的区别小结(配置异同)
2011/12/20 PHP
分享php分页的功能模块
2015/06/16 PHP
php的debug相关函数用法示例
2016/07/11 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
Python中如何引入第三方模块
2020/05/27 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
一些Unix笔试题和面试题
2013/01/22 面试题
写好自荐信要注意的问题
2013/11/10 职场文书
社团文化节策划书
2014/02/01 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
幼儿园大班毕业评语
2014/12/31 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
运动员加油词
2015/07/18 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
MySql数据库 查询时间序列间隔
2022/05/11 MySQL
win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法
2022/08/05 数码科技