侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python使用pylab库实现画线功能的方法详解

Python  /  管理员 发布于 7年前   199

本文实例讲述了Python使用pylab库实现画线功能的方法。分享给大家供大家参考,具体如下:

pylab 提供了比较强大的画图功能,但是函数和参数都比较多,很容易搞混。我们平常使用最多的应该是画线了。下面,简单的对一些常用的划线函数进行了封装,方便使用。

# -*- coding: utf-8 -*-import pylabimport randomclass 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()

运行效果图如下:

附:引用自: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数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。


  • 上一条:
    Python中with及contextlib的用法详解
    下一条:
    Python实现对象转换为xml的方法示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客