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