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

cycler包概述

cycler包的API主要有三个:

  • cycler(*args, **kwargs):工厂函数,创建一个Cycler对象。cycler(*args, **kwargs)有三种调用方式:

    • cycler(arg)argCycler对象。复制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相乘,相当于遍历ncycler对象。

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 pltcolor_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()

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 pltmarker=['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)相关推荐

  1. 断网python第三方库安装_Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包...

    联网情况下在命令终端CMD中输入"pip install numpy"即可自动安装,pandas和matplotlib同理一样方法进行自动安装. 工作的电脑不能上外网,所以不能通过 ...

  2. sku属性组合小例子

    参考: http://www.cnblogs.com/hsp-blog/p/6215721.html http://blog.csdn.net/csdn924618338/article/detail ...

  3. 【约束布局】ConstraintLayout 13 种相对定位属性组合 ( 属性组合 | 用法说明 )

    文章目录 相对定位简介 相对定位属性组合前提条件 相对定位 Left Right 四种组合属性 相对定位 Start End 四种组合属性 相对定位 Top Bottom 四种组合属性 相对定位控件约 ...

  4. Py之matplotlib:python包之matplotlib库图表绘制包的简介、安装、使用方法(matplotlib颜色大全)详细攻略

    Py之matplotlib:python包之matplotlib库图表绘制包的简介.安装.使用方法(matplotlib颜色大全)详细攻略 目录 matplotlib简介 matplotlib安装 m ...

  5. sku排列算法实现商品规格属性组合

    背景 前两年做过一个电商系统的新建商品模块,记忆中比较有难点的是在新增商品的sku规格时,需要把每个规格名称下的规格属性一一组合起来.因此在这里稍微的写个小demo记录下这种规格属性组合的思路

  6. 批处理整理(组合包)

    ZHBautopack.bat setlocal EnableDelayedExpansion echo 开始组合包整合 set WinRar="C:\Program Files (x86) ...

  7. 制作销售属性的组合的集合为哈希表,根据用户点击的属性组合判断某个skuId并跳转到对应的页面

    一.查询spu系列商品: 1.查询spu系列商品中所有属性值之间的组合(一个组合,即一个sku商品)!!! 这里的数据苹果11 颜色:黑色.白色.红色: 版本:128G.256G: 总共6种组合: S ...

  8. Java实现商品sku属性组合

    开发中实现商品模块时,会遇到商品sku组合问题,有两种解决方案,一种由前端实现sku属性组合然后传递到后台:第二种则由后台实现,这里就来记录一下,如何使用java的for循环实现sku商品属性组合: ...

  9. java util包排序_实现java.util.Comparator接口,对对象集合进行多属性组合排序

    Commons - BeanUtils 提供了很多功能,其中一个很有用的是对对象集合进行排序,如Collections.sort(peoples, new BeanComparator("a ...

最新文章

  1. linux内核杂记(6)-进程调度(1)
  2. 牛逼! IDEA 2020 要本土化,真的是全中文了!
  3. 如何在PowerPoint中自动调整图片大小
  4. STL源码剖析 空间配置器 查漏补缺
  5. java 切面_Java笔试面试精心整理得到89道Spring 核心知识【收藏向】
  6. 架构师速成6.4-开发框架
  7. MyBatis常见问题和解决方法
  8. 大漠为什么不支持win10_Win10系统注册使用大漠插件的方法与设置!常见错误0x8002801...
  9. 比PS更简单好用的自动抠图软件 一键抠图工具
  10. JAVA入门:猜大小程序
  11. Python能不能只选择合并一个excel当中指定的sheet 当中指定的列呢?
  12. 取模、乘法和除法运算在CPU和GPU上的效率
  13. 【博学谷学习记录】超强总结,用心分享 | 狂野大数据 | 环境 | hive搭建
  14. php 正态分布数据描述,正态分布-统计百科- 人大经济论坛-经管百科
  15. 流星雨html5,HTML5-流星雨
  16. [HNOI2005]狡猾的商人(差分约束)
  17. [RK3288][Android5.1] 移植笔记 --- eDP显示屏添加
  18. 手机运行慢可以刷机吗_安卓手机反应慢怎么处理刷机有用吗(一个“动作”就能轻松解决,比新买的速度还快)...
  19. 卷积神经网络(CNN)在语音识别中的应用
  20. TMF、NGOSS介绍

热门文章

  1. 市盈率指标详解及相关文献概述
  2. Centos7.4安装与下载
  3. 20核服务器项目,详细解答E5-2680v2,20核40线程服务器的具体用途怎么体现出来
  4. 首席技术官(ChiefTechnologyOfficer)
  5. 一文看懂推荐系统:物品冷启05:流量调控
  6. ZOOM一直显示登录失败,出现Zoom登录失败:100000503,zoom登录失败错误代码1044
  7. 各位端午节快乐 -- Happy the Dragon-Boat Festival
  8. 岁月凶残,敬请珍惜——得知早已不能过五四节时之随想[转自伍迷]
  9. 设计模式学习之锦囊妙计定乾坤
  10. Kinect with Unity3D游戏开发的一点思路总结(体感赛车游戏)