小白學 Python 數據分析(16):Matplotlib(一)坐標系

  • 2020 年 3 月 18 日
  • 筆記

人生苦短,我用 Python

前文傳送門:

小白學 Python 數據分析(1):數據分析基礎

小白學 Python 數據分析(2):Pandas (一)概述

小白學 Python 數據分析(3):Pandas (二)數據結構 Series

小白學 Python 數據分析(4):Pandas (三)數據結構 DataFrame

小白學 Python 數據分析(5):Pandas (四)基礎操作(1)查看數據

小白學 Python 數據分析(6):Pandas (五)基礎操作(2)數據選擇

小白學 Python 數據分析(7):Pandas (六)數據導入

小白學 Python 數據分析(8):Pandas (七)數據預處理

小白學 Python 數據分析(9):Pandas (八)數據預處理(2)

小白學 Python 數據分析(10):Pandas (九)數據運算

小白學 Python 數據分析(11):Pandas (十)數據分組

小白學 Python 數據分析(12):Pandas (十一)數據透視表(pivot_table)

小白學 Python 數據分析(13):Pandas (十二)數據表拼接

小白學 Python 數據分析(14):Pandas (十三)數據導出

小白學 Python 數據分析(15):數據可視化概述

引言

各位同學好,本篇文章,我們來介紹下使用 Matplotlib 時如何建立坐標系。

回想一下以前我們在接受九年義務教育毒打上數學課的時候,應該都畫過折線圖直方圖之類的統計圖表,其中第一步就是建立直角坐標系。

翻出老課本,幫助各位同學回憶一下當年的數學課,直角坐標系就是下面這個:

直角坐標系不僅能存在於平面中,還有立體的:

當然,本文的只介紹平面直角坐標系如何構建,至於立體的,我們後面再聊。

畫布

在構建平面直角坐標系之前,我們需要先創建一個畫布。

What?畫布是啥?

emmmmmmmmmmm,這就類似於我們在電腦上畫畫一樣,需要打開畫圖軟體,創建一個空白的白板,這個白板就是我們後續畫圖的地方。

使用 Matplotlib 創建畫布的程式碼如下,首先需要導入 Matplotlib 的庫:

import matplotlib.pyplot as plt    fig = plt.figure(figsize=(6, 6))

上面這段程式碼我們就完成了一個寬和高都為 6 的畫布的創建。

創建直角坐標系

創建直角坐標系有多很多種方法,這裡我們一種一種來介紹:

add_subplot

首先,我們使用 add_subplot 函數來創建直角坐標系,我們就在剛才創建的那個畫布上創建 1 X 1 個直角坐標系:

import matplotlib.pyplot as plt    fig = plt.figure(figsize=(6, 6))    fig.add_subplot(1,1,1)    plt.show()

我們得到的結果如下:

我們再創建 2 X 2 個直角坐標系:

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()

結果如下圖:

這裡有一點需要說明一下,這裡參數可以省略其中的 , 逗號,如下:

ax1 = fig.add_subplot(221)

參數的含義為創建 2 X 2 網格第一子圖。

subplot2grid

在使用 subplot2grid 函數創建直角坐標系的時候,不需要事先創建畫布,可以直接使用創建,比如我們下面創建一個很簡單的折線圖和柱狀圖:

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()

結果如下:

subplot

同上面的 subplot2grid 一樣,我們同樣可以通過 subplot 來繪製直角坐標系,比如我們拿上面的例子再使用 subplot 寫一遍:

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 完成前面的示例:

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()

結果如下:

可以看到,我們雖然只使用到了兩個坐標,但實際上 subplots 還是會幫我們將 4 個坐標全都創建出來。

小結

前面介紹的集中直角坐標系的創建方法並無本質上的區別,只有第一種 add_subplot 在使用的時候是需要先創建一個畫布的,後面三種都是直接調用 Matplotlib 中的函數從而達到直接創建坐標系的方法。