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登录Dr.com思路以及代码分享
Jun 25 Python
python数组复制拷贝的实现方法
Jun 09 Python
Windows下python2.7.8安装图文教程
May 26 Python
python爬取淘宝商品详情页数据
Feb 23 Python
Python定义二叉树及4种遍历方法实例详解
Jul 05 Python
python日期相关操作实例小结
Jun 24 Python
django页面跳转问题及注意事项
Jul 18 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
用python写PDF转换器的实现
Oct 29 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
浅谈Python numpy创建空数组的问题
May 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把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
Python中的默认参数实例分析
2018/01/29 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
python SVD压缩图像的实现代码
2019/11/05 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
华为C++笔试题
2014/08/05 面试题
高二美术教学反思
2014/01/14 职场文书
公民代理授权委托书
2014/09/24 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
致接力运动员加油稿
2015/07/21 职场文书
公司规章制度范本
2015/08/03 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL