1. 程式人生 > >小白學 Python 資料分析(16):Matplotlib(一)座標系

小白學 Python 資料分析(16):Matplotlib(一)座標系

![](https://cdn.geekdigging.com/python/spider-blog/Python_logo.jpg) > 人生苦短,我用 Python 前文傳送門: [小白學 Python 資料分析(1):資料分析基礎](https://www.geekdigging.com/2020/01/19/6719980708/) [小白學 Python 資料分析(2):Pandas (一)概述](https://www.geekdigging.com/2020/01/20/6718497214/) [小白學 Python 資料分析(3):Pandas (二)資料結構 Series](https://www.geekdigging.com/2020/02/04/3234667780/) [小白學 Python 資料分析(4):Pandas (三)資料結構 DataFrame](https://www.geekdigging.com/2020/02/05/9920298470/) [小白學 Python 資料分析(5):Pandas (四)基礎操作(1)檢視資料](https://www.geekdigging.com/2020/02/16/6852411690/) [小白學 Python 資料分析(6):Pandas (五)基礎操作(2)資料選擇](https://www.geekdigging.com/2020/02/20/6566891797/) [小白學 Python 資料分析(7):Pandas (六)資料匯入](https://www.geekdigging.com/2020/02/23/7355903936/) [小白學 Python 資料分析(8):Pandas (七)資料預處理](https://www.geekdigging.com/2020/02/25/9013297409/) [小白學 Python 資料分析(9):Pandas (八)資料預處理(2)](https://www.geekdigging.com/2020/02/27/2857868620/) [小白學 Python 資料分析(10):Pandas (九)資料運算](https://www.geekdigging.com/2020/02/29/5808964196/) [小白學 Python 資料分析(11):Pandas (十)資料分組](https://www.geekdigging.com/2020/03/03/5975552137/) [小白學 Python 資料分析(12):Pandas (十一)資料透視表(pivot_table)](https://www.geekdigging.com/2020/03/04/8327177610/) [小白學 Python 資料分析(13):Pandas (十二)資料表拼接](https://www.geekdigging.com/2020/03/06/5036602239/) [小白學 Python 資料分析(14):Pandas (十三)資料匯出](https://www.geekdigging.com/2020/03/07/6918490736/) [小白學 Python 資料分析(15):資料視覺化概述](https://www.geekdigging.com/2020/03/09/7393240956/) ## 引言 各位同學好,本篇文章,我們來介紹下使用 Matplotlib 時如何建立座標系。 回想一下以前我們在接受九年義務教育毒打上數學課的時候,應該都畫過折線圖直方圖之類的統計圖表,其中第一步就是建立直角座標系。 翻出老課本,幫助各位同學回憶一下當年的數學課,直角座標系就是下面這個: ![](https://cdn.geekdigging.com/data_analysis/data_visualization/pingmianzuobiao.jpg) 直角座標系不僅能存在於平面中,還有立體的: ![](https://cdn.geekdigging.com/data_analysis/data_visualization/litizuobiao.jpg) 當然,本文的只介紹平面直角座標系如何構建,至於立體的,我們後面再聊。 ## 畫布 在構建平面直角座標系之前,我們需要先建立一個畫布。 What?畫布是啥? emmmmmmmmmmm,這就類似於我們在電腦上畫畫一樣,需要開啟畫圖軟體,建立一個空白的白板,這個白板就是我們後續畫圖的地方。 ![](https://cdn.geekdigging.com/data_analysis/data_visualization/huabu.jpg) 使用 Matplotlib 建立畫布的程式碼如下,首先需要匯入 Matplotlib 的庫: ```python import matplotlib.pyplot as plt fig = plt.figure(figsize=(6, 6)) ``` 上面這段程式碼我們就完成了一個寬和高都為 6 的畫布的建立。 ## 建立直角座標系 建立直角座標系有多很多種方法,這裡我們一種一種來介紹: ### add_subplot 首先,我們使用 `add_subplot` 函式來建立直角座標系,我們就在剛才建立的那個畫布上建立 1 X 1 個直角座標系: ```python import matplotlib.pyplot as plt fig = plt.figure(figsize=(6, 6)) fig.add_subplot(1,1,1) plt.show() ``` 我們得到的結果如下: ![](https://cdn.geekdigging.com/data_analysis/data_visualization/zhijiaozuobiaoxi_1.png) 我們再建立 2 X 2 個直角座標系: ```python import matplotlib.pyplot as plt fig = plt.figure(figsize=(6, 6)) ax1 = fig.add_subplot(2,2,1) ax2 = fig.add_subplot(2,2,2) ax3 = fig.add_subplot(2,2,3) ax4 = fig.add_subplot(2,2,4) plt.show() ``` 結果如下圖: ![](https://cdn.geekdigging.com/data_analysis/data_visualization/zhijiaozuobiaoxi_2.png) 這裡有一點需要說明一下,這裡引數可以省略其中的 `,` 逗號,如下: ```python ax1 = fig.add_subplot(221) ``` 引數的含義為建立 2 X 2 網格第一子圖。 ### subplot2grid 在使用 `subplot2grid` 函式建立直角座標系的時候,不需要事先建立畫布,可以直接使用建立,比如我們下面建立一個很簡單的折線圖和柱狀圖: ```python import matplotlib.pyplot as plt import numpy as np x = np.arange(4) y = np.arange(4) # 繪製折線圖 plt.subplot2grid((2,2),(0,0)) plt.plot(x, y) # 繪製柱狀圖 plt.subplot2grid((2,2),(0,1)) plt.bar(x, y) plt.show() ``` 結果如下: ![](https://cdn.geekdigging.com/data_analysis/data_visualization/zhijiaozuobiaoxi_3.png) ### subplot 同上面的 `subplot2grid` 一樣,我們同樣可以通過 `subplot` 來繪製直角座標系,比如我們拿上面的例子再使用 `subplot` 寫一遍: ```python import matplotlib.pyplot as plt import numpy as np x = np.arange(4) y = np.arange(4) # 繪製折線圖 plt.subplot(221) plt.plot(x, y) # 繪製柱狀圖 plt.subplot(222) plt.bar(x, y) plt.show() ``` 結果還是和上面一樣的,小編不再貼了。 上面這個示例的含義是將圖示區域分為 2 X 2 共計 4 個區域,在第一個區域上建立折線圖,在第二個區域上建立柱狀圖。 ### subplots `subplots` 看起來和 `subplot` 很像,實際上也是非常像的,它和 `subplot` 的不同之處是 `subplot` 一次只能返回一個座標系,而 `subplots` 一次可以返回多個座標系。 我們接著使用 `subplots` 完成前面的示例: ```python import matplotlib.pyplot as plt import numpy as np x = np.arange(4) y = np.arange(4) fig, axes = plt.subplots(2, 2) # 繪製折線圖 axes[0,0].plot(x,y) # 繪製柱狀圖 axes[0,1].bar(x,y) plt.show() ``` 結果如下: ![](https://cdn.geekdigging.com/data_analysis/data_visualization/zhijiaozuobiaoxi_4.png) 可以看到,我們雖然只使用到了兩個座標,但實際上 `subplots` 還是會幫我們將 4 個座標全都創建出來。 ## 小結 前面介紹的集中直角座標系的建立方法並無本質上的區別,只有第一種 `add_subplot` 在使用的時候是需要先建立一個畫布的,後面三種都是直接呼叫 Matplotlib 中的函式從而達到直接建立座標系的