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 相关文章推荐
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
Python常见工厂函数用法示例
Mar 21 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
在cmd中查看python的安装路径方法
Jul 03 Python
python求质数列表的例子
Nov 24 Python
解决Python Matplotlib绘图数据点位置错乱问题
May 16 Python
Python中的Cookie模块如何使用
Jun 04 Python
Python 实现键盘鼠标按键模拟
Nov 18 Python
python实现视频压缩功能
Dec 18 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
小文件php+SQLite存储方案
2010/09/04 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
浅析Python迭代器的高级用法
2020/07/16 Python
美国山地自行车、露营、户外装备和服装购物网站:Aventuron
2018/05/05 全球购物
学习经验演讲稿
2014/05/10 职场文书
铣工实训报告
2014/11/05 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
Python基础之元编程知识总结
2021/05/23 Python
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript