Matplotlib - 使用Cycler進行樣式設定



Cycler 是從Matplotlib中提取的一個獨立包,它旨在控制繪圖的樣式屬性,如顏色、標記和線型。此工具允許您輕鬆地迴圈遍歷不同的樣式,以便在一個軸上繪製多條線。

匯入Cycler - 要開始使用Cycler,您需要將其匯入到Python指令碼中。

from cycler import cycler

這使您能夠建立和操作Cycler以設定繪圖樣式。

建立Cycler - cycler函式用於建立一個新的Cycler物件。它可以帶一個位置引數、一對位置引數或關鍵字引數的組合來呼叫。

# Creating a color Cycler
color_cycle = cycler(color=['r', 'g', 'b'])

"color_cycle" 是一個Cycler物件,它迴圈遍歷紅色、綠色和藍色。獲得Cycler後,您可以將其連結到matplotlib的繪圖屬性。

迴圈遍歷多個屬性

Cycler包提供了用於組合和操作多個Cycler以建立複雜樣式變化的高階操作。這意味著您可以將cycler加在一起或將它們相乘以組合不同的屬性。

以下是cycler中的不同操作:

  • Cycler加法 - 使用+運算子可以組合多個Cycler物件。例如:
cycler(color=['r', 'g', 'b']) + cycler(linestyle=['-', '--', ':'])
  • Cycler乘法 - 可以將Cycler相乘以建立更廣泛的獨特樣式。例如
cycler(color=['r', 'g', 'b']) * cycler(linestyle=['-', '--', ':'])
  • 整數乘法 - 可以將Cycler物件乘以整數值以增加其長度。cycler * 2 和 2 * cycler 都產生相同的結果,重複元素。以下是語法
color_cycle * 2
  • Cycler連線 - 可以使用Cycler.concat()方法或頂級concat()函式連線Cycler物件。

在本教程中,我們將探討兩種不同的方法,使用Cycler包自定義Matplotlib中繪圖的樣式。

  • 設定預設屬性迴圈(rc引數) - 這是全域性設定,它確保每個後續繪圖都將設定為指定的樣式。
  • 設定單個軸對的屬性迴圈 - 這是區域性設定,它將自定義屬性迴圈專門應用於特定的一組軸。

設定預設屬性迴圈(rc引數)

在matplotlib中,可以使用matplotlib.pyplot.rc()方法為所有將來的繪圖指定預設樣式,這將設定繪圖和軸中線條的預設迴圈器。這意味著您將來建立的每個繪圖都將遵循此顏色和線型迴圈,除非您覆蓋它。

示例1

這是一個基本的示例,演示瞭如何為多個繪圖迴圈遍歷不同的線型。此處使用plt.rc()方法設定繪圖的預設線型。

import matplotlib.pyplot as plt 
from cycler import cycler 

# Set the property cycle for the linestyle of lines in the axes
linestyle_cycler = cycler('linestyle', ['-', ':', '-.']) 
plt.rc('axes', prop_cycle=linestyle_cycler) 

# Create multiple plots using a loop
for i in range(5): 
   x = range(i, i + 5)     
   plt.plot(range(5), x)

# Display the plot
plt.legend(['first', 'second', 'third', 'fourth', 'fifth'], loc='upper left', fancybox=True, shadow=True) 
plt.show()

輸出

執行上述程式碼後,我們將獲得以下輸出:

Basic Example 1

讓我們透過將多個(顏色和線型)迴圈器加在一起(+符號)來組合它們。

示例2

此示例演示瞭如何使用Cycler為您的繪圖定義預設樣式(迴圈遍歷顏色和線型),從而可以輕鬆地視覺化所有具有不同顏色('r','g','b','y')和線型('-','--',':','-.')的繪圖。

from cycler import cycler
import matplotlib.pyplot as plt
import numpy as np

# Generate sample data
x = np.linspace(0, 2 * np.pi, 50)
offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)
yy = np.transpose([np.sin(x + phi) for phi in offsets])

# Set default prop_cycle
default_cycler = (cycler(color=['r', 'g', 'b', 'y']) +
   cycler(linestyle=['-', '--', ':', '-.']))
plt.rc('lines', linewidth=4)
plt.rc('axes', prop_cycle=default_cycler)

# Plot with the default color cycle
plt.plot(yy)
plt.title('Set Default Color Cycle')
plt.show()

輸出

執行上述程式碼後,我們將獲得以下輸出:

Styling with Cycler Example 1

設定單個軸對的屬性迴圈

自定義圖形中特定軸對的樣式,而不影響其他軸。您可以使用matplotlib.axes.Axes.set_prop_cycle()應用此自定義迴圈器。這意味著只有這組特定的軸上的繪圖才會遵循指定的顏色和線寬迴圈。

示例

在此示例中,ax0上的第一組繪圖遵循預設的顏色和線型迴圈。ax1上的第二組繪圖使用為該軸專門定義的自定義顏色和線寬迴圈,使用set_prop_cycle()方法。

from cycler import cycler
import matplotlib.pyplot as plt
import numpy as np

# Generate sample data 
x = np.linspace(0, 2 * np.pi, 50)
offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)
yy = np.transpose([np.sin(x + phi) for phi in offsets])

# Define a default cycler for colors and linestyles
default_cycler = (cycler(color=['r', 'g', 'b', 'y']) +
   cycler(linestyle=['-', '--', ':', '-.']))

# Set the default linewidth for lines in all plots
plt.rc('lines', linewidth=4)

# Set the default property cycle for axes to the default cycler
plt.rc('axes', prop_cycle=default_cycler)

# Create a figure and two axes
fig, (ax0, ax1) = plt.subplots(nrows=2, figsize=(7, 8))

# Plot on the first axis using the default color cycle
ax0.plot(yy)
ax0.set_title('Default Color Cycle: rgby')

# Define a custom cycler 
custom_cycler = (cycler(color=['c', 'm', 'y', 'k']) +
   cycler(lw=[1, 2, 3, 4]))

# Set the custom property cycle for the second axis
ax1.set_prop_cycle(custom_cycler)

# Plot on the second axis using the custom color and linewidth cycle
ax1.plot(yy)
ax1.set_title('Custom Color Cycle: cmyk')

# Add space between the two plots
fig.subplots_adjust(hspace=0.3)

# Show the plots
plt.show()

輸出

執行上述程式碼後,我們將獲得以下輸出:

styling_with_cycler_ex2
廣告