您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎么在Python中使用Matplotlib繪圖庫,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。
具體方法如下:
sudo pip3 install matplotlib
本文中的源碼和測試數據可以在這里獲取:matplotlib_tutorial
本文的代碼示例會用到另外一個Python庫:NumPy。建議讀者先對NumPy有一定的熟悉,我之前也寫過一個NumPy的基礎教程,參見這里:Python 機器學習庫 NumPy 教程。
本文的代碼在如下環境中測試:
Apple OS X 10.13
Python 3.6.3 matplotlib 2.1.1
numpy 1.13.3
介紹
Matplotlib適用于各種環境,包括:
Python腳本
IPython shell Jupyter notebook
Web應用服務器
用戶圖形界面工具包
使用Matplotlib,能夠的輕易生成各種類型的圖像,例如:直方圖,波譜圖,條形圖,散點圖等。并且,可以非常輕松的實現定制。
入門代碼示例
下面我們先看一個最簡單的代碼示例,讓我們感受一下Matplotlib是什么樣的:
# test.py import matplotlib.pyplot as plt import numpy as np data = np.arange(100, 201) plt.plot(data) plt.show()
這段代碼的主體邏輯只有三行,但是它卻繪制出了一個非常直觀的線性圖,如下所示:
對照著這個線形圖,我們來講解一下三行代碼的邏輯:
通過np.arange(100, 201)
生成一個[100, 200]之間的整數數組,它的值是:[100, 101, 102, … , 200]
通過matplotlib.pyplot
將其繪制出來。很顯然,繪制出來的值對應了圖中的縱坐標(y軸)。而matplotlib本身為我們設置了圖形的橫坐標(x軸):[0, 100],因為我們剛好有100個數值
通過plt.show()
將這個圖形顯示出來
這段代碼非常的簡單,運行起來也是一樣。如果你已經有了本文的運行環境,將上面的代碼保存到一個文本文件中(或者通過Github獲取本文的源碼),然后通過下面的命令就可以在你自己的電腦上看到上面的圖形了:
python3 test.py
注1:后面的教程中,我們會逐步講解如何定制圖中的每一個細節。例如:坐標軸,圖形,著色,線條樣式,等等。
注2:如果沒有必要,下文的截圖會去掉圖形外側的邊框,只保留圖形主體。
一次繪制多個圖形
有些時候,我們可能希望一次繪制多個圖形,例如:兩組數據的對比,或者一組數據的不同展示方式等。
可以通過下面的方法創建多個圖形:
多個figure
可以簡單的理解為一個figure
就是一個圖形窗口。matplotlib.pyplot
會有一個默認的figure
,我們也可以通過plt.figure()
創建更多個。如下面的代碼所示:
# figure.py import matplotlib.pyplot as plt import numpy as np data = np.arange(100, 201) plt.plot(data) data2 = np.arange(200, 301) plt.figure() plt.plot(data2) plt.show()
這段代碼繪制了兩個窗口的圖形,它們各自是一個不同區間的線形圖,如下所示:
注:初始狀態這兩個窗口是完全重合的。
多個subplot
有些情況下,我們是希望在同一個窗口顯示多個圖形。此時就這可以用多個subplot。下面是一段代碼示例:
# subplot.py import matplotlib.pyplot as plt import numpy as np data = np.arange(100, 201) plt.subplot(2, 1, 1) plt.plot(data) data2 = np.arange(200, 301) plt.subplot(2, 1, 2) plt.plot(data2) plt.show()
這段代碼中,除了subplot
函數之外都是我們熟悉的內容。subplot
函數的前兩個參數指定了subplot數量,即:它們是以矩陣的形式來分割當前圖形,兩個整數分別指定了矩陣的行數和列數。而第三個參數是指矩陣中的索引。
因此,下面這行代碼指的是:2行1列subplot中的第1個subplot。
plt.subplot(2, 1, 1)
下面這行代碼指的是:2行1列subplot中的第2個subplot。
plt.subplot(2, 1, 2)
所以這段代碼的結果是這個樣子:
subplot
函數的參數不僅僅支持上面這種形式,還可以將三個整數(10之內的)合并一個整數。例如:2, 1, 1
可以寫成211
,2, 1, 2
可以寫成212
。
因此,下面這段代碼的結果是一樣的:
import matplotlib.pyplot as plt import numpy as np data = np.arange(100, 201) plt.subplot(211) plt.plot(data) data2 = np.arange(200, 301) plt.subplot(212) plt.plot(data2) plt.show()
subplot
函數的詳細說明參見這里:matplotlib.pyplot.subplot
常用圖形示例
Matplotlib可以生成非常多的圖形式樣,多到令人驚嘆的地步。大家可以在這里:Matplotlib Gallery 感受一下。
本文作為第一次的入門教程,我們先來看看最常用的一些圖形的繪制。
線性圖
前面的例子中,線性圖的橫軸的點都是自動生成的,而我們很可能希望主動設置它。另外,線條我們可能也希望對其進行定制。看一下下面這個例子:
# plot.py import matplotlib.pyplot as plt plt.plot([1, 2, 3], [3, 6, 9], '-r') plt.plot([1, 2, 3], [2, 4, 9], ':g') plt.show()
這段代碼可以讓我們得到這樣的圖形:
這段代碼說明如下:
plot
函數的第一個數組是橫軸的值,第二個數組是縱軸的值,所以它們一個是直線,一個是折線; 最后一個參數是由兩個字符構成的,分別是線條的樣式和顏色。前者是紅色的直線,后者是綠色的點線。關于樣式和顏色的說明請參見plot
函數的API Doc:matplotlib.pyplot.plot
散點圖
scatter
函數用來繪制散點圖。同樣,這個函數也需要兩組配對的數據指定x和y軸的坐標。下面是一段代碼示例:
# scatter.py import matplotlib.pyplot as plt import numpy as np N = 20 plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='r', s=100, alpha=0.5) plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='g', s=200, alpha=0.5) plt.scatter(np.random.rand(N) * 100, np.random.rand(N) * 100, c='b', s=300, alpha=0.5) plt.show()
這段代碼說明如下:
這幅圖包含了三組數據,每組數據都包含了20個隨機坐標的位置 參數c
表示點的顏色,s
是點的大小,alpha
是透明度
這段代碼繪制的圖形如下所示:
scatter
函數的詳細說明參見這里:matplotlib.pyplot.scatter
餅狀圖
pie
函數用來繪制餅狀圖。餅狀圖通常用來表達集合中各個部分的百分比。
# pie.py import matplotlib.pyplot as plt import numpy as np labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] data = np.random.rand(7) * 100 plt.pie(data, labels=labels, autopct='%1.1f%%') plt.axis('equal') plt.legend() plt.show()
這段代碼說明如下:
data
是一組包含7個數據的隨機數值 圖中的標簽通過labels
來指定 autopct
指定了數值的精度格式 plt.axis('equal')
設置了坐標軸大小一致 plt.legend()
指明要繪制圖例(見下圖的右上角)
這段代碼輸出的圖形如下所示:
pie
函數的詳細說明參見這里:matplotlib.pyplot.pie
條形圖
bar
函數用來繪制條形圖。條形圖常常用來描述一組數據的對比情況,例如:一周七天,每天的城市車流量。
下面是一個代碼示例:
# bar.py import matplotlib.pyplot as plt import numpy as np N = 7 x = np.arange(N) data = np.random.randint(low=0, high=100, size=N) colors = np.random.rand(N * 3).reshape(N, -1) labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] plt.title("Weekday Data") plt.bar(x, data, alpha=0.8, color=colors, tick_label=labels) plt.show()
這段代碼說明如下:
這幅圖展示了一組包含7個隨機數值的結果,每個數值是[0, 100]的隨機數 它們的顏色也是通過隨機數生成的。np.random.rand(N * 3).reshape(N, -1)
表示先生成21(N x 3)個隨機數,然后將它們組裝成7行,那么每行就是三個數,這對應了顏色的三個組成部分。如果不理解這行代碼,請先學習一下Python 機器學習庫 NumPy 教程 title
指定了圖形的標題,labels
指定了標簽,alpha
是透明度
這段代碼輸出的圖形如下所示:
bar
函數的詳細說明參見這里:matplotlib.pyplot.bar
直方圖
hist
函數用來繪制直方圖。直方圖看起來是條形圖有些類似。但它們的含義是不一樣的,直方圖描述了數據中某個范圍內數據出現的頻度。這么說有些抽象,我們通過一個代碼示例來描述就好理解了:
# hist.py import matplotlib.pyplot as plt import numpy as np data = [np.random.randint(0, n, n) for n in [3000, 4000, 5000]] labels = ['3K', '4K', '5K'] bins = [0, 100, 500, 1000, 2000, 3000, 4000, 5000] plt.hist(data, bins=bins, label=labels) plt.legend() plt.show()
上面這段代碼中,[np.random.randint(0, n, n) for n in [3000, 4000, 5000]]
生成了包含了三個數組的數組,這其中:
第一個數組包含了3000個隨機數,這些隨機數的范圍是 [0, 3000) 第二個數組包含了4000個隨機數,這些隨機數的范圍是 [0, 4000) 第三個數組包含了5000個隨機數,這些隨機數的范圍是 [0, 5000)
bins數組用來指定我們顯示的直方圖的邊界,即:[0, 100) 會有一個數據點,[100, 500)會有一個數據點,以此類推。所以最終結果一共會顯示7個數據點。同樣的,我們指定了標簽和圖例。
這段代碼的輸出如下圖所示:
關于怎么在Python中使用Matplotlib繪圖庫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。