小白學 Python 資料分析(16):Matplotlib(一)座標系
阿新 • • 發佈:2020-03-18
![](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 中的函式從而達到直接建立座標系的