matplotlib之属性组合包(cycler)的使用


Posted in Python onFebruary 24, 2021

matplotlib的依赖包cycler是matplotlib自主开发的属性组合包,功能与内置模块itertools很多函数非常相似,可用于创建特殊的迭代器。matpoltlib在属性设置底层中使用了cycler包,典型的案例就是在多数据系列绘图中循环使用颜色、线条等外观设置。使用cycler可以避免构造多重循环,更简便、灵活的组合属性。

cycler包概述

cycler包的API主要有三个:

  • cycler(*args, **kwargs):工厂函数,创建一个Cycler对象。cycler(*args, **kwargs)有三种调用方式:
    • cycler(arg):arg为Cycler对象。复制Cycler对象的构造函数。
    • cycler(label1=iter1[, label2=iter2[, ...]]):label必须是有效的Python标识符,要求类似字典的键,iter为可迭代对象。求多组参数的点积,功能类似于zip()函数。
    • cycler(label, itr):从一对label和可迭代对象构造Cycler对象。这里label可以为整数和带空格的字符串。
  • Cycler(left[, right, op]) :底层类。
  • concat(left, right) :拼接两个cycler对象。

基本功能

cycler的基本功能是方便的将一个可哈希的对象(hashable)与一系列值进行映射。
根据下面的例子可知,cycler对象可以将关键字参数名称与序列进行一一映射,cycler对象是一个迭代器,迭代输出的对象为字典结构,键为关键字参数名称,值为序列的元素。

In [1]: from cycler import cycler
In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
In [3]: color_cycle
Out[3]: cycler('color', ['r', 'g', 'b'])
In [4]: len(color_cycle)
Out[4]: 3
In [5]: color_cycle.keys
Out[5]: {'color'}
In [6]: for i in color_cycle:
  ...:   print(i)
  ...:
{'color': 'r'}
{'color': 'g'}
{'color': 'b'}

cycler的基本功能与循环非常相似,cycler的强大在于创建复杂的属性组合。

加法运算(cycler对象相加)

两个cycler对象进行加法运算,相当于将两个对象的元素按次序一一组合,功能类似于Python内置的zip()函数。

In [1]: from cycler import cycler
In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
In [3]: lw_cycle = cycler(lw=range(1, 4))
In [4]: wc = lw_cycle + color_cycle
In [5]: for s in wc:
  ...:   print(s)
  ...:
{'lw': 1, 'color': 'r'}
{'lw': 2, 'color': 'g'}
{'lw': 3, 'color': 'b'}
 
cycler函数传递多个关键字参数就相当于对这些参数进行加法运算
In [1]: from cycler import cycler
In [2]: wc = cycler(c=['r', 'g', 'b'], lw=range(3))
In [3]: for s in wc:
  ...:   print(s)
  ...:
{'c': 'r', 'lw': 0}
{'c': 'g', 'lw': 1}
{'c': 'b', 'lw': 2}

乘法运算(cycler对象相乘)

两个cycler对象进行乘法运算,相当于求两个对象的元素的笛卡尔积,功能类似于Python内置的itertools.product()函数。

In [1]: from cycler import cycler
In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
In [3]: m_cycle = cycler(marker=['s', 'o'])
In [4]: m_c = m_cycle * color_cycle
In [5]: for s in m_c:
  ...:   print(s)
  ...:
{'marker': 's', 'color': 'r'}
{'marker': 's', 'color': 'g'}
{'marker': 's', 'color': 'b'}
{'marker': 'o', 'color': 'r'}
{'marker': 'o', 'color': 'g'}
{'marker': 'o', 'color': 'b'}

标量乘法运算(cycler对象与整数相乘)

cycler对象与整数n相乘,相当于遍历n次cycler对象。

In [1]: from cycler import cycler
In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
In [3]: color_cycle * 2
Out[3]: cycler('color', ['r', 'g', 'b', 'r', 'g', 'b'])

cycler对象拼接

cycler对象拼接有一个前提就是两个对象必须有相同的键!

In [1]: from cycler import cycler
In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
In [3]: color_cycle2 = cycler(color=['c', 'm', 'y', 'k'])
In [4]: color_cycle = color_cycle.concat(color_cycle2)
In [5]: color_cycle
Out[6]: cycler('color', ['r', 'g', 'b', 'c', 'm', 'y', 'k'])
In [7]: color_cycle3 = cycler(gray=['0.5'])
In [8]: color_cycle = color_cycle.concat(color_cycle3)
---------------------------------------------------------------------------
ValueError                Traceback (most recent call last)
ValueError: Keys do not match:
    Intersection: set()
    Disjoint: {'color', 'gray'}

cycler对象切片

cycler对象支持切片操作。

In [1]: from cycler import cycler
In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
In [3]: color_cycle[:2]
Out[3]: cycler('color', ['r', 'g'])
In [4]: color_cycle[::-1]
Out[4]: cycler('color', ['b', 'g', 'r'])

案例:设置线条属性

使用cycler

from cycler import cycler
import matplotlib.pyplot as plt

color_cycle = cycler(color=['r', 'g', 'b'])
m_cycle = cycler(marker=['s', 'o'])
m_c = m_cycle * color_cycle
for i, j in enumerate(m_c):
  print(i, j)
  plt.plot([i, i], **j)
plt.show()

matplotlib之属性组合包(cycler)的使用

0 {'marker': 's', 'color': 'r'}
1 {'marker': 's', 'color': 'g'}
2 {'marker': 's', 'color': 'b'}
3 {'marker': 'o', 'color': 'r'}
4 {'marker': 'o', 'color': 'g'}
5 {'marker': 'o', 'color': 'b'}

常规多重循环方法

import matplotlib.pyplot as plt

marker=['s', 'o']
color=['r', 'g', 'b']

n=0
for i in marker:
  for j in color:
    plt.plot([n, n], marker=i, c=j)
    n = n+1
plt.show()

案例总结

相对而言,使用cycler避免了多重循环,当属性种类较多时更简洁,更加灵活。

到此这篇关于matplotlib之属性组合包(cycler)的使用的文章就介绍到这了,更多相关matplotlib 属性组合包内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Vue的el-scrollbar实现自定义滚动
May 29 Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
提升python处理速度原理及方法实例
Dec 25 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 #Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 #Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 #Python
pandas map(),apply(),applymap()区别解析
Feb 24 #Python
Python的Tqdm模块实现进度条配置
Feb 24 #Python
详解pandas apply 并行处理的几种方法
Feb 24 #Python
python自动生成sql语句的脚本
Feb 24 #Python
You might like
删除无限级目录与文件代码共享
2006/07/12 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
php 的反射详解及示例代码
2016/08/25 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
2020/05/29 jQuery
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
Python标准库与第三方库详解
2014/07/22 Python
Python代码调试的几种方法总结
2015/04/15 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
自考生自我鉴定范文
2013/10/01 职场文书
自荐信格式范文
2013/10/07 职场文书
就业推荐表自我鉴定
2013/10/29 职场文书
护士实习求职信
2014/06/22 职场文书
个人简历自荐信
2014/06/26 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android