Matplotlib
提供了大量設定引數,
這些引數可以但不限於讓我們從整體上調整通過 Matplotlib
繪製的圖形樣式,
這裡面的引數還有很多是功能性的,和其他工具結合時需要用的設定。
通過plt.rcParams
,可以檢視所有的設定資訊:
import matplotlib.pyplot as plt
print(len(plt.rcParams))
#執行結果
312
總共居然有312
個設定選項。
一一介紹所有的選項意義不大,具體可參考官方檔案:
https://matplotlib.org/stable/api/matplotlib_configuration_api.html
本篇只是拋磚引玉,介紹幾個常用的引數,目的是瞭解引數的使用方法和產生的效果。
首先是座標軸相關的設定,通過下面的程式碼可以看看有多個關於座標軸的設定:
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()
關於網格,除了通過座標軸來設定,它還有自己的一些專門的設定選項:
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)
這是修改後的效果,修改前的效果和上一節中的一樣。
刻度相關的引數如下:
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軸沒設定這個屬性,它的刻度線是在圖形外的。
我們繪製圖形的時候,一個圖形中有多個曲線時,每個曲線預設就會使用不同的顏色。
這是因為設定中有一個預設的顏色列表,繪製多個圖形時,會依次使用其中的顏色。
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()
改變顏色列表之後,兩條曲線的顏色都變了。
繪製曲線或者其他圖形時,其實是有引數可以指定顏色的,為什麼還需要這個顏色列表的設定?
這是因為,如果我們能夠確定整體報告的風格,那麼就可以在一開始就根據報告的風格設定好這個顏色列表,
然後繪製各種圖形時就不需要指定顏色,極大簡化後續的程式碼,也提高了程式碼的可維護性。
在設定 rcParams
時,我們可以根據需要修改各種選項,以達到更好的顯示效果。
但需要注意的是,過多地修改 rcParams
可能會導致繪圖緩慢或出現其他問題,
因此需要根據實際情況進行合理的設定。