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]: 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之屬性組合包(cycler)的使用的文章就介紹到這瞭,更多相關matplotlib 屬性組合包內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python數學建模之Matplotlib 實現圖片繪制
- 利用python繪制線型圖
- python數據可視化matplotlib繪制折線圖示例
- 手把手教你用Matplotlib實現數據可視化
- python設置 matplotlib 正確顯示中文的四種方式