matplotlib之属性组合包(cycler)的使用
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]:fromcyclerimportcycler 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]:foriincolor_cycle: ...:print(i) ...: {'color':'r'} {'color':'g'} {'color':'b'}
cycler的基本功能与循环非常相似,cycler的强大在于创建复杂的属性组合。
加法运算(cycler对象相加)
两个cycler对象进行加法运算,相当于将两个对象的元素按次序一一组合,功能类似于Python内置的zip()函数。
In[1]:fromcyclerimportcycler 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]:forsinwc: ...:print(s) ...: {'lw':1,'color':'r'} {'lw':2,'color':'g'} {'lw':3,'color':'b'} cycler函数传递多个关键字参数就相当于对这些参数进行加法运算 In[1]:fromcyclerimportcycler In[2]:wc=cycler(c=['r','g','b'],lw=range(3)) In[3]:forsinwc: ...:print(s) ...: {'c':'r','lw':0} {'c':'g','lw':1} {'c':'b','lw':2}
乘法运算(cycler对象相乘)
两个cycler对象进行乘法运算,相当于求两个对象的元素的笛卡尔积,功能类似于Python内置的itertools.product()函数。
In[1]:fromcyclerimportcycler 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]:forsinm_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]:fromcyclerimportcycler 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]:fromcyclerimportcycler 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) --------------------------------------------------------------------------- ValueErrorTraceback(mostrecentcalllast) ValueError:Keysdonotmatch: Intersection:set() Disjoint:{'color','gray'}
cycler对象切片
cycler对象支持切片操作。
In[1]:fromcyclerimportcycler 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
fromcyclerimportcycler importmatplotlib.pyplotasplt color_cycle=cycler(color=['r','g','b']) m_cycle=cycler(marker=['s','o']) m_c=m_cycle*color_cycle fori,jinenumerate(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'}
常规多重循环方法
importmatplotlib.pyplotasplt marker=['s','o'] color=['r','g','b'] n=0 foriinmarker: forjincolor: plt.plot([n,n],marker=i,c=j) n=n+1 plt.show()
案例总结
相对而言,使用cycler避免了多重循环,当属性种类较多时更简洁,更加灵活。
到此这篇关于matplotlib之属性组合包(cycler)的使用的文章就介绍到这了,更多相关matplotlib属性组合包内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。