Matplotlib 中的顏色迴圈

Salman Mehmood 2022年5月11日
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()

輸出:

顏色迴圈 - 輸出 1

以下示例允許我們在使用顏色迴圈時在繪圖中設定預設顏色。

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

輸出:

顏色迴圈 - 輸出 2

單擊此處以閱讀有關 Matplotlib 中顏色迴圈的更多資訊。

Salman Mehmood avatar Salman Mehmood avatar

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

相關文章 - Matplotlib Color