HOWTO · Matplotlib
如何在 Matplotlib Pyplot 中顯示網格
本文說明如何在 Matplotlib 圖表中使用 grid() 顯示網格,調整網格的顏色與線條樣式,並選擇顯示垂直或水平網格線。
本頁內容
在 Matplotlib 圖表中,於呼叫 show() 顯示圖表前先呼叫 grid(),即可顯示網格線。你可以設定網格線的顏色、線條樣式與寬度,也可以使用 axis 參數選擇顯示垂直線、水平線或兩者。以下範例先繪製折線圖,再新增網格並調整樣式,最後比較不同的網格方向。
在 Matplotlib 中繪製基本圖表
先準備 x 和 y 數值,再將它們傳入 plot()。標籤能清楚指出各座標軸代表的內容;後續範例會沿用這張圖,方便你比較網格的變化。每個 x 值會與相同位置的 y 值配對,因此這兩個清單描述的是一組資料點。plot() 會依序連接這些點。標題和標籤都是選填項目,但在你將資料改用於自己的圖表時,它們有助於說明繪製的數值代表什麼。此時,座標軸上只有折線與刻度,繪圖區域尚未顯示網格。範例程式碼中的圖表標題與座標軸標籤維持英文,因為程式碼區塊會原樣保留。
from matplotlib import pyplot as plt
x = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
y = [200, 300, 300, 350, 380, 450, 500, 500, 520, 525, 530]
plt.title("My Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.plot(x, y)
plt.show()
在 Matplotlib 圖表中使用 grid()
繪製資料後、呼叫 show() 前,呼叫 pyplot.grid() 即可新增網格。這會在目前的座標軸上開啟網格,不需要先顯示圖表。在這個 pyplot 範例中,plot() 會在作用中的座標軸上建立折線,而 grid() 則會開啟網格線。先呼叫這兩個函式,再呼叫 show(),Matplotlib 就能一次繪製完成的圖表。如果你已經有圖表,只要在繪圖指令之後、顯示圖表的指令之前加入網格呼叫,不必重新建立資料或標籤。網格線會沿著座標軸的刻度位置繪製,讓你更容易估讀折線上的數值,同時不會改變繪圖資料。
from matplotlib import pyplot as plt
x = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
y = [200, 300, 300, 350, 380, 450, 500, 500, 520, 525, 530]
plt.title("My Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.plot(x, y)
plt.grid()
plt.show()
修改 Matplotlib 網格的屬性
將樣式選項傳入 grid() 即可調整網格外觀。例如,color="r" 會選用紅色,linestyle="dotted" 會繪製點線,而 linewidth=1 會設定較細的線條。linewidth 的值可以是數字,也可以是浮點數。下方列出的是常見的簡寫色碼與線條樣式名稱,僅供舉例,並非完整清單。你可以在同一次呼叫中組合這些關鍵字引數,調整網格而不必更動折線資料或圖表本身。較淡或較細的網格能讓資料折線保持醒目;對比明顯的顏色則有助於辨識參考線。選擇的值應能與座標軸及圖表中的其他資料線清楚區分。
from matplotlib import pyplot as plt
x = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
y = [200, 300, 300, 350, 380, 450, 500, 500, 520, 525, 530]
plt.title("My Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.plot(x, y)
plt.grid(color="r", linestyle="dotted", linewidth=1)
plt.show()
常見的單字母色碼包括 b(藍色)、g(綠色)、r(紅色)、c(青色)、m(洋紅色)、y(黃色)、k(黑色)與 w(白色)。常見的線條樣式包括 - 或 solid(實線)、-- 或 dashed(虛線)、-. 或 dashdot(點畫線),以及 : 或 dotted(點線)。linewidth 可獨立控制線條粗細,不受顏色或樣式影響,值可使用 0.5 或 1.5 等數字。範例使用紅色點線,線寬為一。Matplotlib 也接受名稱形式的顏色與其他線條樣式;若需要特定選項,或想了解支援值的詳細資訊,請參閱連結的 API 參考文件。
繪製垂直或水平網格線
axis 參數可選擇網格線的方向:axis="x" 會在 x 軸位置繪製垂直網格線,axis="y" 會在 y 軸位置繪製水平網格線,而 axis="both" 則會同時繪製兩種網格線。預設值是 both。此範例將三種設定並列,方便比較。命名方式是依照控制網格線位置的座標軸刻度而定:x 軸刻度位於圖表的上下兩側,因此對應的網格線會垂直延伸;y 軸刻度位於圖表左右兩側,因此對應的網格線會水平延伸。若需要垂直參考線,例如比較多個 x 位置的數值,請使用 axis="x"。若要比較圖表中不同位置的高度,請使用 axis="y"。若讀者需要同時追蹤兩個座標,則保留預設值或指定 axis="both"。每個子圖都有自己的 Axes 物件,因此迴圈可以在重用同一組資料的同時,將不同設定套用至各個面板。
import matplotlib.pyplot as plt
x = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110]
y = [200, 300, 300, 350, 380, 450, 500, 500, 520, 525, 530]
_, (horizontal, vertical, both) = plt.subplots(1, 3)
for axis, setting in ((horizontal, "y"), (vertical, "x"), (both, "both")):
axis.plot(x, y)
axis.grid(axis=setting, linestyle="dotted", color="b")
axis.set_title(f'axis="{setting}"')
plt.show()