- 利用Python解決數學問題(原書第2版)
- (英)薩姆·莫利
- 1480字
- 2025-08-07 15:28:37
2.4 繪制誤差條圖形
我們從現實世界中收集的數據通常都帶有一定的不確定性:現實世界中沒有任何測量是完全準確的。例如,如果使用卷尺測量距離,我們可以假設結果具有一定的精度,但超出這個精度范圍后,將無法確定測量是否有效。對于這種情況,我們可能確信測量的精度可以達到約1毫米或略小于1/16英寸(當然,這是在假設測量完全準確的前提下)。這些值是常用卷尺上的最小刻度。假設我們已經收集了一組包含10個測量值的數據(以厘米為單位),希望將這些值與我們確信的精度一起繪制出來(高于或低于精確測量值的范圍稱為誤差)。這就是我們在本示例中要解決的問題。
2.4.1 準備工作
和往常一樣,我們以別名plt導入Matplotlib的pyplot接口。我們首先用NumPy數組生成假設的測量數據和精度:

讓我們看看如何使用Matplotlib中的繪圖例程來繪制這些測量值,并使用誤差條表示每個測量值的不確定性。
2.4.2 實現方法
以下步驟演示了如何在圖形上繪制測量值、展現精度信息。
1.首先,我們需要像往常一樣生成一個新的圖形和坐標軸對象:

2.接下來,我們使用坐標軸對象上的errorbar方法來繪制數據及誤差條。精度信息(誤差)作為yerr參數傳遞:

3.和往常一樣,我們應該為坐標軸添加有意義的標簽,并為圖形添加標題:

4.由于Matplotlib默認情況下不會在每個值處生成xlabel刻度,因此我們將x刻度值設置為測量ID,以便把它們都顯示在圖形上:

生成的圖形如圖2.4所示。測量值顯示在x符號標記處,誤差條在該值上下延伸,精度為0.1厘米(1毫米)。

圖2.4 10個樣本測量值(單位:厘米)及其估計誤差圖
從圖中可以看到,每個標記處都有一個垂直條,指示著我們期望的真實測量值應在的范圍。
2.4.3 原理解析
errorbar方法的工作方式與其他繪圖方法類似。前兩個參數是要繪制點的x和y坐標(注意,這兩個參數必須同時提供,在其他繪圖方法中則不一定是必需的)。yerr參數表示要添加到圖表中的誤差條的大小,并且都應該是正值。傳遞給此參數的值的形式確定了誤差條的性質。在本例中,我們提供了一個扁平的NumPy數組,其中包含10個條目,每個條目對應一個測量值,這導致了每個點上下都有相同大小的誤差條(對應參數中的值)。或者,我們還可以指定一個2×10的數組,其中第一行包含下誤差,第二行包含上誤差。(由于所有的誤差都相同,我們也可以提供一個表示所有測量值公共誤差的浮點數。)
除了數據參數外,還有常見的格式參數,包括fmt格式字符串(在這里,將其用作關鍵字參數,因為我們在它前面命名了yerr參數)。除了其他繪圖方法中常用的線和點的格式之外,還有用于自定義誤差條外觀的特殊參數。在該例中,我們使用了capsize參數在誤差條的兩端添加“帽子”,以便可以輕松識別誤差條的末端(它的默認樣式是簡單的直線)。
2.4.4 更多內容
在這個示例中,我們只在y軸上繪制了誤差,因為x的值只是測量的序號(ID)。如果兩組值都有不確定性,你還可以使用xerr參數指定x軸上的誤差值,此參數的使用方式與之前使用的yerr參數相同。
如果要繪制大量遵循某種趨勢的數據點,你可能希望有選擇地繪制誤差條。為此,你可以使用errorevery關鍵字參數來指示Matplotlib僅在每隔n個數據點處添加誤差條,而不是在所有數據點處添加。這個參數可以是一個正整數,表示用于選擇有誤差點的“步長”,或者是包含從第一個值開始的偏移量和步長的元組。例如,errorevery=(2, 5)會從第二個數據開始,每五個數據點處顯示一個誤差條。
你還可以用相同的方式向條形圖添加誤差條(除此之外,xerr和yerr參數僅為關鍵字)。我們可以使用以下命令將該示例的數據繪制為條形圖:

如果在例子中使用這兩行代碼,而不是調用errorbar,那么我們將得到一個條形圖,如圖2.5所示。

圖2.5 帶有誤差條的測量值條形圖
與之前一樣,誤差條兩端有指示標記,表示我們期望的y軸上真實測量值所在的范圍。
- ASP.NET Web API:Build RESTful web applications and services on the .NET framework
- Reporting with Visual Studio and Crystal Reports
- Mastering Natural Language Processing with Python
- OpenStack Cloud Computing Cookbook(Fourth Edition)
- 深入淺出Android Jetpack
- STM32F0實戰:基于HAL庫開發
- Mastering Linux Network Administration
- Jenkins Continuous Integration Cookbook(Second Edition)
- Arduino家居安全系統構建實戰
- Mastering Unity 2D Game Development(Second Edition)
- SQL 經典實例
- Spring Boot實戰
- Spring技術內幕:深入解析Spring架構與設計原理(第2版)
- 基于GPU加速的計算機視覺編程:使用OpenCV和CUDA實時處理復雜圖像數據
- 深入大型數據集:并行與分布化Python代碼