Matplotlib 中的顏色迴圈
在本教程中,我們將介紹顏色迴圈,並瞭解如何藉助 matplotlib 中的顏色迴圈獲取和設定顏色屬性。
在 Matplotlib 中使用顏色迴圈獲取和設定顏色屬性
當我們處理大量資料時,我們會繪製多條線,因此我們需要顯示特定的顏色圖。但是 Matplotlib 顯示有其特定的顏色軌跡,那麼我們如何更改它呢?
根據 Matplotlib 文件,我們不能使用面向使用者
(又名公共
)來訪問底層迭代器。我們只能通過私人
方法訪問它。
但是,如果不更改迭代器,我們將無法獲得它的狀態。
我們可以用不同的方式設定顏色或屬性迴圈。但是,在使用 public-facing
方法時,我們無法訪問可迭代物件。
不過,我們可以通過建立軸物件並使用 _get_lines
輔助類例項來訪問它。ax._get_lines
令人困惑,但幕後機制允許 plot 命令處理所有可以呼叫圖的奇怪和多樣的方式。
除其他外,它可以跟蹤自動分配的顏色。同樣,ax._get_patches_for_fill
方法控制迴圈通過預設填充顏色和補丁屬性。
我們有一個用於處理顏色迴圈迭代中的線條的屬性,稱為 ax._get_lines.color_cycle
和用於處理補丁的 ax._get_patches_for_fill.color_cycle
。
Matplotlib 1.5 及更高版本已更改為使用 Cycler
庫。我們可以使用名為 prop_cycler
的迭代來代替 color_cycle
、屬性的 dict
,或者在我們的程式中僅使用顏色。
但是我們看不到迭代器的狀態,因為我們可以使用裸迭代器物件輕鬆獲得以下專案。
next_color = next(color_cycle)
next_color
指定我們要在繪圖中顯示的下一種顏色。按照設計,如果不更改迭代器,我們將無法獲得它的狀態。
在 Matplotlib 1.5 或更高版本中,我們可以訪問 cycler
物件以在程式的當前狀態下使用。由於 cycler
物件不可訪問(公開或私下),只有 itertools
。
但是,可以訪問從 cycler
物件建立的迴圈例項。所以,沒有辦法獲得顏色或屬性 cycler
;因此,我們使用 fill_between
。
相反,我們可以匹配之前繪製的專案的顏色。最好在繪圖屬性上設定新專案的顏色,而不是確定顏色或屬性。
示例 1:
import numpy as np
import matplotlib.pyplot as plot
def custom_plot(x,y,**kwargs):
ax=kwargs.pop("ax",plot.gca())
base_line,=ax.plot(x,y,**kwargs)
ax.fill_between(x,0.9*y,1.1*y,facecolor=base_line.get_color(),alpha=0.5)
x=np.linspace(0,1,10)
custom_plot(x,x)
custom_plot(x,x*2)
custom_plot(x,x-x,color="yellow",lw=3)
plot.show()
輸出:
以下示例允許我們在使用顏色迴圈時在繪圖中設定預設顏色。
示例 2:
import numpy as np
import matplotlib.pyplot as plot
import matplotlib as mpl
# Takes key value pair to set default cycle color
mpl.rcParams["axes.prop_cycle"]=mpl.cycler(color=["b","r","r"])
x1=np.linspace(0,20,100)
fig,axes=plot.subplots(nrows=2)
for i in range(10):
axes[0].plot(x1,i*(x1*10)**2) # create a plot on zero axis
for j in range(10):
axes[1].plot(x1,j* np.cos(x1)) # # create second plot on 1 axis
plot.show()
輸出:
單擊此處以閱讀有關 Matplotlib 中顏色迴圈的更多資訊。
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn