HOWTO · Matplotlib

Python Matplotlib 誤差棒

可以使用 Python 中 Matplotlib 的 errorbar() 函式繪製帶有誤差線的資料。

本頁內容

使用 Matplotlib 的 errorbar() 函式繪製測量值,並以 yerr 表示垂直方向的不確定性、以 xerr 表示水平方向的不確定性,或同時表示兩者。以下範例使用固定數值,讓你看出各參數如何改變圖表。

Python 誤差棒

誤差棒表示圖中測量值周圍的不確定範圍。例如,標示容差的電阻器有一段可能值範圍,而非保證完全精確的單一數值。在圖表中,誤差棒會呈現資料點周圍的範圍,但不會改變測量值本身。

執行此範例:

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4]
y_values = [1, 2, 3, 4]
y_error = [0.9, 0.5, 0.75, 0.25]

plt.errorbar(x_values, y_values, yerr=y_error)
plt.show()

此範例繪製四個資料點,並為每個點加上垂直誤差棒。yerr 會提供各個 y 值對應的垂直誤差範圍。y_error 清單中的每個點各有一個數值,因此清單長度會與繪製的資料點對應。Matplotlib 也接受共用的純量誤差範圍,或包含下限與上限誤差範圍的雙列陣列;每種格式都必須符合資料的形狀要求。若每個點的不確定性相同且對稱,請使用純量;若各點有不同的對稱不確定性,請使用序列;若不確定性不對稱,則分別指定下限與上限誤差範圍。圖中的資料是固定清單,並非隨機產生的測量值。

若也要顯示水平不確定性,請傳入 xerr 值。下一個範例使用相同的四個固定資料點,並為每個點指定 0.5 的水平誤差範圍。因此 x 軸上的誤差棒呈水平,而 yerr 仍會繪製垂直誤差棒。

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4]
y_values = [1, 2, 3, 4]
y_error = [0.9, 0.5, 0.75, 0.25]
x_error = [0.5, 0.5, 0.5, 0.5]

plt.errorbar(x_values, y_values, yerr=y_error, xerr=x_error, fmt="--ro", ms=10)
plt.show()

格式字串 fmt="--ro" 結合了虛線(--)、紅色(r)和圓形標記(o)。你可以用 fmt 選擇資料線的樣式、顏色和標記;若需要更細緻的控制,也可以分別設定繪圖選項。ms 選項會設定標記大小。若要調整標記外觀,mec(別名為 markeredgecolor)會改變外框顏色,mfc(別名為 markerfacecolor)會改變填色,而 mew(別名為 markeredgewidth)會改變外框寬度。這些選項會影響資料標記,不會影響誤差棒。

誤差棒有專屬的樣式參數。ecolor 會設定誤差棒顏色;例如,ecolor="g" 會將誤差棒設為綠色。elinewidth 控制誤差棒線條的寬度。capsize 設定末端小橫線的長度,capthick 則控制其粗細。這些末端橫線標示誤差棒的端點,並非資料標記。請依圖表的比例與視覺重量調整這些值,不要假定預設外觀一定合適。

此範例將上述設定套用至相同的資料、資料線和標記樣式:

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4]
y_values = [1, 2, 3, 4]
y_error = [0.9, 0.5, 0.75, 0.25]
x_error = [0.5, 0.5, 0.5, 0.5]

plt.errorbar(
    x_values,
    y_values,
    yerr=y_error,
    xerr=x_error,
    fmt="--ro",
    ms=10,
    ecolor="g",
    elinewidth=3,
    capsize=10,
    capthick=3,
)
plt.show()

當圖表有許多資料點時,每個點都顯示誤差棒可能會讓圖表更難閱讀。使用 errorevery 選擇要顯示誤差棒的資料點,同時保留繪製的資料線和標記。例如,errorevery=2 會從序列中的第一個點開始,每隔一個點顯示誤差棒。它只會改變誤差棒的位置,不會改變底層資料或資料線。若要偏移選取位置,這個參數可以接受整數步長,或由起始位置與步長組成的配對值。

執行此範例,查看如何在保留資料線和圓形標記的同時,每隔一個點顯示誤差棒:

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4]
y_values = [1, 2, 3, 4]
y_error = [0.9, 0.5, 0.75, 0.25]

plt.errorbar(x_values, y_values, yerr=y_error, fmt="-o", errorevery=2)
plt.show()

請依據資料所代表的資訊選擇選項:垂直測量值的不確定性使用 yerr,水平測量值的不確定性使用 xerr,兩者都有不確定性時則同時使用。讓每個誤差值對應到它所描述的資料點;不確定性不對稱時,分別指定下限與上限誤差範圍,再調整 fmt、標記選項和誤差棒樣式,以提升可讀性。如果圖表顯得雜亂,可以用 errorevery 減少顯示的誤差棒數量,同時保留繪製的資料點。