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基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
Python标准库之sqlite3使用实例
Nov 25 Python
Python读取ini文件、操作mysql、发送邮件实例
Jan 01 Python
Python实现爬取知乎神回复简单爬虫代码分享
Jan 04 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
Mar 25 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 Python
利用Python实现模拟登录知乎
May 25 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
FCKeditor添加自定义按钮
2008/03/27 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
Javascript 按位与赋值运算符 (&=)使用介绍
2014/02/04 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
python服务器与android客户端socket通信实例
2014/11/12 Python
Python字符串和文件操作常用函数分析
2015/04/08 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
python3个性签名设计实现代码
2018/06/19 Python
numpy基础教程之np.linalg
2019/02/12 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
先进德育工作者事迹材料
2014/01/24 职场文书
村委会换届选举方案
2014/05/03 职场文书
干部作风建设工作总结
2014/10/29 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
2015年环卫工作总结
2015/04/28 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android