【matplotlib基礎】--繪圖設定

2023-09-13 15:01:22

Matplotlib 提供了大量設定引數,
這些引數可以但不限於讓我們從整體上調整通過 Matplotlib 繪製的圖形樣式,
這裡面的引數還有很多是功能性的,和其他工具結合時需要用的設定。

通過plt.rcParams,可以檢視所有的設定資訊:

import matplotlib.pyplot as plt

print(len(plt.rcParams))
#執行結果
312

總共居然有312個設定選項。

一一介紹所有的選項意義不大,具體可參考官方檔案:
https://matplotlib.org/stable/api/matplotlib_configuration_api.html

本篇只是拋磚引玉,介紹幾個常用的引數,目的是瞭解引數的使用方法和產生的效果。

1. 座標軸

首先是座標軸相關的設定,通過下面的程式碼可以看看有多個關於座標軸的設定:

import matplotlib.pyplot as plt

count = 1
for key, val in plt.rcParams.items():
    #只列印以 axes 開頭的設定
    if key.startswith("axes"):
        print(key, " = ", val)
        count += 1

#相關的設定有 38 個
print(f"axes 相關設定有: {count} 個")

一共有38個關於座標軸的設定。
挑選一些設定,看看修改前後的效果:

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.rcParams.update(plt.rcParamsDefault)
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend()
plt.show()

修改了背景色,邊框和網格:

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.rcParams.update(plt.rcParamsDefault)
plt.rc("axes", facecolor="#FFE4C4", edgecolor="#A52A2A", grid=True)

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend()
plt.show()

2. 網格

關於網格,除了通過座標軸來設定,它還有自己的一些專門的設定選項:

count = 1
for key, val in plt.rcParams.items():
    if key.startswith("grid"):
        print(key, " = ", val)
        count += 1

print(f"grid 相關設定有: {count} 個")

總共有5個相關的設定,設定看看效果。
程式碼和上面類似,這裡只把設定部分的程式碼列出來。

plt.rcParams.update(plt.rcParamsDefault)
plt.rc("axes", grid=True)
plt.rc("grid", linestyle="solid", linewidth=2, color="g", alpha=0.5)

這是修改後的效果,修改前的效果和上一節中的一樣。

3. 刻度

刻度相關的引數如下:

xcount = 1
ycount = 1
for key, val in plt.rcParams.items():
    if key.startswith("xtick"):
        print(key, " = ", val)
        xcount += 1

    if key.startswith("ytick"):
        print(key, " = ", val)
        ycount += 1

print(f"xtick 相關設定有: {xcount} 個")
print(f"ytick 相關設定有: {ycount} 個")

X軸刻度和Y軸刻度的相關設定各有21個。

設定方法和效果如下:

plt.rcParams.update(plt.rcParamsDefault)
plt.rc("xtick", color="g", direction="in")
plt.rc("ytick", color="r")

上面的範例分別設定X軸Y軸的顏色,以及X軸direction
direction="in" 表示刻度的小短線在圖形內部,
Y軸沒設定這個屬性,它的刻度線是在圖形外的。

4. 顏色列表

我們繪製圖形的時候,一個圖形中有多個曲線時,每個曲線預設就會使用不同的顏色。
這是因為設定中有一個預設的顏色列表,繪製多個圖形時,會依次使用其中的顏色。

print(plt.rcParams["axes.prop_cycle"])

#執行結果
cycler('color', 
['#1f77b4', 
 '#ff7f0e', 
 '#2ca02c',
 '#d62728',
 '#9467bd',
 '#8c564b',
 '#e377c2',
 '#7f7f7f',
 '#bcbd22',
 '#17becf'])

如果去查下顏色編碼的話,可以看出,前兩個顏色就是藍色和紅色。
所以上面的範例中的兩條曲線都是藍色和紅色。

修改下這個預設的顏色列表,看看變化效果:

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

from matplotlib import cycler

colors = cycler(
    "color", ["#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"]
)

plt.rcParams.update(plt.rcParamsDefault)
plt.rc("axes", prop_cycle=colors)

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend()
plt.show()

改變顏色列表之後,兩條曲線的顏色都變了。
繪製曲線或者其他圖形時,其實是有引數可以指定顏色的,為什麼還需要這個顏色列表的設定?

這是因為,如果我們能夠確定整體報告的風格,那麼就可以在一開始就根據報告的風格設定好這個顏色列表,
然後繪製各種圖形時就不需要指定顏色,極大簡化後續的程式碼,也提高了程式碼的可維護性。

5. 總結

在設定 rcParams 時,我們可以根據需要修改各種選項,以達到更好的顯示效果。

但需要注意的是,過多地修改 rcParams 可能會導致繪圖緩慢或出現其他問題,
因此需要根據實際情況進行合理的設定。