• 售前

  • 售后

热门帖子
入门百科

matplotlib之属性组合包(cycler)的使用

[复制链接]
茹蕙zx 显示全部楼层 发表于 2021-10-25 19:51:07 |阅读模式 打印 上一主题 下一主题
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对象是一个迭代器,迭代输出的对象为字典布局,键为关键字参数名称,值为序列的元素。
  1. In [1]: from cycler import cycler
  2. In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
  3. In [3]: color_cycle
  4. Out[3]: cycler('color', ['r', 'g', 'b'])
  5. In [4]: len(color_cycle)
  6. Out[4]: 3
  7. In [5]: color_cycle.keys
  8. Out[5]: {'color'}
  9. In [6]: for i in color_cycle:
  10.   ...:   print(i)
  11.   ...:
  12. {'color': 'r'}
  13. {'color': 'g'}
  14. {'color': 'b'}
复制代码
cycler的根本功能与循环非常相似,cycler的强盛在于创建复杂的属性组合。
加法运算(cycler对象相加)


两个cycler对象举行加法运算,相称于将两个对象的元素按序次逐一组合,功能雷同于Python内置的zip()函数。
  1. In [1]: from cycler import cycler
  2. In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
  3. In [3]: lw_cycle = cycler(lw=range(1, 4))
  4. In [4]: wc = lw_cycle + color_cycle
  5. In [5]: for s in wc:
  6.   ...:   print(s)
  7.   ...:
  8. {'lw': 1, 'color': 'r'}
  9. {'lw': 2, 'color': 'g'}
  10. {'lw': 3, 'color': 'b'}
  11. cycler函数传递多个关键字参数就相当于对这些参数进行加法运算
  12. In [1]: from cycler import cycler
  13. In [2]: wc = cycler(c=['r', 'g', 'b'], lw=range(3))
  14. In [3]: for s in wc:
  15.   ...:   print(s)
  16.   ...:
  17. {'c': 'r', 'lw': 0}
  18. {'c': 'g', 'lw': 1}
  19. {'c': 'b', 'lw': 2}
复制代码
乘法运算(cycler对象相乘)


两个cycler对象举行乘法运算,相称于求两个对象的元素的笛卡尔积,功能雷同于Python内置的itertools.product()函数。
  1. In [1]: from cycler import cycler
  2. In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
  3. In [3]: m_cycle = cycler(marker=['s', 'o'])
  4. In [4]: m_c = m_cycle * color_cycle
  5. In [5]: for s in m_c:
  6.   ...:   print(s)
  7.   ...:
  8. {'marker': 's', 'color': 'r'}
  9. {'marker': 's', 'color': 'g'}
  10. {'marker': 's', 'color': 'b'}
  11. {'marker': 'o', 'color': 'r'}
  12. {'marker': 'o', 'color': 'g'}
  13. {'marker': 'o', 'color': 'b'}
复制代码
标量乘法运算(cycler对象与整数相乘)


cycler对象与整数n相乘,相称于遍历n次cycler对象。
  1. In [1]: from cycler import cycler
  2. In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
  3. In [3]: color_cycle * 2
  4. Out[3]: cycler('color', ['r', 'g', 'b', 'r', 'g', 'b'])
复制代码
cycler对象拼接


cycler对象拼接有一个前提就是两个对象必须有雷同的键!
  1. In [1]: from cycler import cycler
  2. In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
  3. In [3]: color_cycle2 = cycler(color=['c', 'm', 'y', 'k'])
  4. In [4]: color_cycle = color_cycle.concat(color_cycle2)
  5. In [5]: color_cycle
  6. Out[6]: cycler('color', ['r', 'g', 'b', 'c', 'm', 'y', 'k'])
  7. In [7]: color_cycle3 = cycler(gray=['0.5'])
  8. In [8]: color_cycle = color_cycle.concat(color_cycle3)
  9. ---------------------------------------------------------------------------
  10. ValueError                Traceback (most recent call last)
  11. ValueError: Keys do not match:
  12.     Intersection: set()
  13.     Disjoint: {'color', 'gray'}
复制代码
cycler对象切片


cycler对象支持切片操作。
  1. In [1]: from cycler import cycler
  2. In [2]: color_cycle = cycler(color=['r', 'g', 'b'])
  3. In [3]: color_cycle[:2]
  4. Out[3]: cycler('color', ['r', 'g'])
  5. In [4]: color_cycle[::-1]
  6. Out[4]: cycler('color', ['b', 'g', 'r'])
复制代码
案例:设置线条属性


使用cycler
  1. from cycler import cycler
  2. import matplotlib.pyplot as plt
  3. color_cycle = cycler(color=['r', 'g', 'b'])
  4. m_cycle = cycler(marker=['s', 'o'])
  5. m_c = m_cycle * color_cycle
  6. for i, j in enumerate(m_c):
  7.   print(i, j)
  8.   plt.plot([i, i], **j)
  9. plt.show()
复制代码
  1. 0 {'marker': 's', 'color': 'r'}
  2. 1 {'marker': 's', 'color': 'g'}
  3. 2 {'marker': 's', 'color': 'b'}
  4. 3 {'marker': 'o', 'color': 'r'}
  5. 4 {'marker': 'o', 'color': 'g'}
  6. 5 {'marker': 'o', 'color': 'b'}
复制代码
常规多重循环方法

  1. import matplotlib.pyplot as plt
  2. marker=['s', 'o']
  3. color=['r', 'g', 'b']
  4. n=0
  5. for i in marker:
  6.   for j in color:
  7.     plt.plot([n, n], marker=i, c=j)
  8.     n = n+1
  9. plt.show()
复制代码
案例总结


相对而言,使用cycler制止了多重循环,当属性种类较多时更轻便,更加灵活。

到此这篇关于matplotlib之属性组合包(cycler)的使用的文章就先容到这了,更多相关matplotlib 属性组合包内容请搜索脚本之家以前的文章或继承浏览下面的相关文章盼望各人以后多多支持脚本之家!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作