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()
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,属性组合包
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]