1. 程式人生 > 其它 >matplotlib資料視覺化圖表

matplotlib資料視覺化圖表

第21章 matplotlib資料視覺化開發

Matplotlib是Python的一個數據視覺化工具包,可以方便地繪製資料統計相關的圖表,如折線圖、散點圖、直方圖等,強大的繪圖功能使Python廣泛用於資料探勘領域。

21.1 環境搭建

  1. 使用pip工具安裝模組:pip install matplotlib
  2. 安裝前需確保Windows系統上已安裝visual studio .NET 執行庫。

21.2 實現簡單繪圖

matplotlib有兩大子模組,pyplot包含了繪製各種圖表的工具,pylab包含了繪製數學曲線工具。

  1. 繪製散點scatter()

    import matplotlib.pyplot as plt
    # 定義樣本點橫座標、縱座標的列表
    xset = [60,85.5,49.2,47.4]
    yset = [18.4,16.8,17.6,16.4]
    # 使用scatter()方法繪製散點,可設為紅色
    plt.scatter(xset,yset,c='r')
    # 可以定義座標軸的範圍
    plt.axis([0,90,0,20])
    # 展示圖表
    plt.show()
    
  2. 繪製折線plot()

    import matplotlib.pyplot as plt
    # 定義樣本點縱座標的列表
    xset = [0,1,2,3,4,5,6]
    yset = [0,1,4,9,16,25,36]
    set = [0,0.5,2,4.5,8,12.5,18]
    # 使用plot()方法繪製折線
    plt.plot(xset,yset,c='r')
    # 當沒有指定橫座標時,預設序列的下標作為橫座標
    plt.plot(set,c='b')
    # 展示圖表
    plt.show()
    
  3. 設定標籤和線條樣式(注意,預設的字型庫不顯示中文)

    import matplotlib.pyplot as plt
    import matplotlib as mpl
    xset = [0,1,2,3,4,5,6]
    yset = [0,1,4,9,16,25,36]
    plt.plot(xset,yset,c='r',linewidth='5')
    # 模組的全域性物件,匯入字型庫設定字型
    mpl.rcParams["font.sans-serif"] = ["SimHei"]
    # 設定圖表的標籤說明
    plt.title("示例圖表",fontsize=24)
    plt.xlabel("橫座標",fontsize=14)
    plt.ylabel("縱座標",fontsize=14)
    # 設定刻度的樣式
    plt.tick_params(axis='both',labelsize=14)
    # 可以本地儲存為圖片
    plt.savefig("示例圖表.png",bbox_inches='tight') # 第二個引數設定邊緣空白。
    # 展示圖表
    plt.show()
    
  4. 柱形圖bar()

    • 原始的簡單柱形圖

      import matplotlib.pyplot as plt
      import matplotlib as mpl
      # 設定圖表標籤
      mpl.rcParams["font.sans-serif"] = ["SimHei"]
      plt.title("班級人數圖")
      plt.xlabel("班級")
      plt.ylabel("人數")
      # 繪製多個柱形,引數表:x座標、高度、寬度、校準(預設為center)
      plt.bar(x=(1,2,3,4),height=(45,50,40,55),width=0.4,align="edge")
      plt.show()
      
    • 詳細標籤說明的柱形圖

      import matplotlib.pyplot as plt
      import matplotlib as mpl
      # 設定圖表標籤
      mpl.rcParams["font.sans-serif"] = ["SimHei"]
      plt.title("專業人數圖")
      plt.xlabel("專業")
      plt.ylabel("人數")
      plt.xticks((1,2,3,4),("計算機","機械","會計","日語"))
      plt.ylim(0,60)
      # 繪製多個柱形,引數表:x座標、高度、寬度、校準(預設為center)
      rectangles = plt.bar(x=(1,2,3,4),height=(45,50,40,55),width=0.4)
      # 可以用text()為柱形新增數值標註
      for rect in rectangles:
          height = rect.get_height()
          plt.text(x=rect.get_x(),                # x座標
                   y=height+1.5,                  # y座標
                   s="%s" % (height),             # 標註內容
                   fontsize=15,                   # 字型大小
                   color="r",                     # 字型顏色
                   backgroundcolor="y",           # 背景顏色
                   horizontalalignment="left",    # 水平對齊
                   verticalalignment="bottom",    # 豎直對齊
                   rotation=30,                   # 旋轉
                   alpha=0.4)                     # 透明度(0到1之間)
      plt.show()
      
  5. 繪製多幅子圖

    • 實際上,matplotlib中呼叫plot()函式時,會首先呼叫gca()和gcf()兩個函式來獲取當前的座標軸和影象,如果沒有影象,則會用figure()函式建立一個,所以我們可以直接用figure()建立繪畫框,再用subplot()函式建立子圖。

      import matplotlib.pyplot as plt
      # 建立一個繪圖框
      fig = plt.figure()
      # 在繪圖框中建立兩個子圖p1、p2,引數表:多少行、多少列、第幾幅,預設(1,1,1)
      p1 = fig.add_subplot(2,1,1)
      p2 = fig.add_subplot(2,1,2)
      # 繪製兩個子圖
      xset = [1,2,3,4,5,6,7,8]
      yset = [2,1,3,5,2,6,12,7]
      p1.plot(xset,yset,c='b')
      p2.scatter(xset,yset,c="r")
      plt.show()
      
  6. 繪製曲線

    import matplotlib.pyplot as plt
    import matplotlib.pylab as lab
    # 設定定義域的範圍(-pi到pi)的列表,引數表:起始值,結束值,樣本數(樣條曲線)。
    X = lab.np.linspace(start=-lab.np.pi,stop=lab.np.pi,num=256)
    # 使用數學函式設定值域的列表
    C, S = lab.np.cos(X), lab.np.sin(X)
    # 繪製曲線
    plt.plot(X,C)
    plt.plot(X,S)
    plt.xticks((-3.14,-1.57,0,1.57,3.14),("-pi","-pi/2","0","pi/2","pi"))
    plt.show()
    

21.3 大資料分析的示例

  • 【.csv】檔案是一種儲存大資料的檔案,Python可以呼叫 csv模組解析這種檔案。

    import csv
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from datetime import datetime
    # 定義資料集:日期、高溫、低溫
    dateSet, highSet, lowSet = [],[],[]
    # 開啟一個本地的.csv檔案
    with open("./death_valley_2014.csv") as file:
        read = csv.reader(file)
        header = next(read)
        # 遍歷每一行,並將相應數值新增到資料集。
        for row in read:
            try:
                date = datetime.strptime(row[0],"%Y-%m-%d")  # 按格式解析出日期。
                high = int(row[1])
                low = int(row[3])
            except ValueError:
                print(date, "missing message")
            else:
                dateSet.append(date)
                highSet.append(high)
                lowSet.append(low)
    # 用資料集繪製圖形
    plt.plot(dateSet,highSet,c='r',alpha=0.3)
    plt.plot(dateSet,lowSet,c='b',alpha=0.3)
    plt.fill_between(dateSet,highSet,lowSet,facecolor='b',alpha=0.2)
    # 設定圖表樣式
    mpl.rcParams["font.sans-serif"] = ["SimHei"]
    plt.title("2014溫度變化圖")
    plt.xlabel("月份",fontsize=12)
    plt.ylabel("攝氏度",fontsize=12)
    plt.tick_params(axis="both",which="major",labelsize=20)
    plt.tick_params(axis="x",which="major",labelsize=12,rotation=30)
    plt.show()