主頁 > 知識(shí)庫 > matplotlib之屬性組合包(cycler)的使用

matplotlib之屬性組合包(cycler)的使用

熱門標(biāo)簽:客戶服務(wù) 百度AI接口 呼叫中心市場需求 語音系統(tǒng) Win7旗艦版 硅谷的囚徒呼叫中心 電話運(yùn)營中心 企業(yè)做大做強(qiáng)

matplotlib的依賴包c(diǎn)ycler是matplotlib自主開發(fā)的屬性組合包,功能與內(nèi)置模塊itertools很多函數(shù)非常相似,可用于創(chuàng)建特殊的迭代器。matpoltlib在屬性設(shè)置底層中使用了cycler包,典型的案例就是在多數(shù)據(jù)系列繪圖中循環(huán)使用顏色、線條等外觀設(shè)置。使用cycler可以避免構(gòu)造多重循環(huán),更簡便、靈活的組合屬性。

cycler包概述

cycler包的API主要有三個(gè):

  • cycler(*args, **kwargs):工廠函數(shù),創(chuàng)建一個(gè)Cycler對(duì)象。cycler(*args, **kwargs)有三種調(diào)用方式:
    • cycler(arg):arg為Cycler對(duì)象。復(fù)制Cycler對(duì)象的構(gòu)造函數(shù)。
    • cycler(label1=iter1[, label2=iter2[, ...]]):label必須是有效的Python標(biāo)識(shí)符,要求類似字典的鍵,iter為可迭代對(duì)象。求多組參數(shù)的點(diǎn)積,功能類似于zip()函數(shù)。
    • cycler(label, itr):從一對(duì)label和可迭代對(duì)象構(gòu)造Cycler對(duì)象。這里label可以為整數(shù)和帶空格的字符串。
  • Cycler(left[, right, op]) :底層類。
  • concat(left, right) :拼接兩個(gè)cycler對(duì)象。

基本功能

cycler的基本功能是方便的將一個(gè)可哈希的對(duì)象(hashable)與一系列值進(jìn)行映射。
根據(jù)下面的例子可知,cycler對(duì)象可以將關(guān)鍵字參數(shù)名稱與序列進(jìn)行一一映射,cycler對(duì)象是一個(gè)迭代器,迭代輸出的對(duì)象為字典結(jié)構(gòu),鍵為關(guān)鍵字參數(shù)名稱,值為序列的元素。

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的基本功能與循環(huán)非常相似,cycler的強(qiáng)大在于創(chuàng)建復(fù)雜的屬性組合。

加法運(yùn)算(cycler對(duì)象相加)

兩個(gè)cycler對(duì)象進(jìn)行加法運(yùn)算,相當(dāng)于將兩個(gè)對(duì)象的元素按次序一一組合,功能類似于Python內(nèi)置的zip()函數(shù)。

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函數(shù)傳遞多個(gè)關(guān)鍵字參數(shù)就相當(dāng)于對(duì)這些參數(shù)進(jìn)行加法運(yùn)算
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}

乘法運(yùn)算(cycler對(duì)象相乘)

兩個(gè)cycler對(duì)象進(jìn)行乘法運(yùn)算,相當(dāng)于求兩個(gè)對(duì)象的元素的笛卡爾積,功能類似于Python內(nèi)置的itertools.product()函數(shù)。

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'}

標(biāo)量乘法運(yùn)算(cycler對(duì)象與整數(shù)相乘)

cycler對(duì)象與整數(shù)n相乘,相當(dāng)于遍歷n次cycler對(duì)象。

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對(duì)象拼接

cycler對(duì)象拼接有一個(gè)前提就是兩個(gè)對(duì)象必須有相同的鍵!

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對(duì)象切片

cycler對(duì)象支持切片操作。

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'])

案例:設(shè)置線條屬性

使用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'}

常規(guī)多重循環(huán)方法

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

案例總結(jié)

相對(duì)而言,使用cycler避免了多重循環(huán),當(dāng)屬性種類較多時(shí)更簡潔,更加靈活。

到此這篇關(guān)于matplotlib之屬性組合包(cycler)的使用的文章就介紹到這了,更多相關(guān)matplotlib 屬性組合包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • matplotlib事件處理基礎(chǔ)(事件綁定、事件屬性)
  • 關(guān)于matplotlib-legend 位置屬性 loc 使用說明
  • 詳解Matplotlib繪圖之屬性設(shè)置
  • 簡單了解Python matplotlib線的屬性

標(biāo)簽:長沙 山西 濟(jì)南 崇左 山西 海南 安康 喀什

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《matplotlib之屬性組合包(cycler)的使用》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266