• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      帶你十分鐘快速入門畫圖神器 Matplotlib

       長沙7喜 2018-09-19

      作者

      王偉同學

      已獲原作者授權,如需轉載,請聯系原作者。

      一篇快速上手 Matplotlib 的好文章~


      在開始正式介紹 Matplotlib 用法之前,先來簡單了解下 Matplotlib。


      Matplotlib 是 Python 的一個繪圖庫。它包含了大量的工具,你可以使用這些工具創建各種圖形,包括簡單的散點圖,正弦曲線,甚至是三維圖形。

      目錄

      1. 畫一個簡單的圖形

      2. 在一張圖紙里繪制多個圖形

      3. 更多設置

          3.1 設置 figure

          3.2 設置標題

          3.3 設置坐標軸

          3.4 設置 label 和 legend

          3.5 添加注釋

      4. 使用子圖

      5. 常見的圖形

          5.1 散點圖

          5.2 柱狀圖

      6. 中文亂碼解決


      # 導入相關模塊
      import matplotlib.pyplot as plt
      import numpy as np

      畫一個簡單的圖形

      這里我們通過畫出一個正弦曲線圖來講解下基本用法。

      首先通過 np.linspace 方式生成 x,它包含了 50 個元素的數組,這 50 個元素均勻的分布在 [0, 2pi] 的區間上。然后通過 np.sin(x) 生成 y。

      x = np.linspace(02 * np.pi, 50)
      y = np.sin(x)

      有了 x 和 y 數據之后,我們通過 plt.plot(x, y) 來畫出圖形,并通過 plt.show() 來顯示。

      plt.plot(x, y)
      plt.show()


      在一張圖紙里繪制多個圖形

      有時候,可能需要在一個圖紙里繪制多個圖形,這里我們同時繪制了 (x, y), (x, y * 2)兩個圖形。

      plt.plot(x, y)
      plt.plot(x, y * 2)
      plt.show()

      繪制出圖形之后,我們可以自己調整更多的樣式,比如顏色、點、線。

      plt.plot(x, y, 'y*-')
      plt.plot(x, y * 2'm--')
      plt.show()


      可以看到,設置樣式時,就是增加了一個字符串參數,比如 'y*-' ,其中 y 表示黃色,* 表示 星標的點,- 表示實線。

      這里列舉一些常見的顏色表示方式:

      顏色表示方式
      藍色b
      綠色g
      紅色r
      青色c
      品紅m
      黃色y
      黑色k
      白色w

      常見的點的表示方式:

      點的類型表示方式
      .
      像素,
      o
      方形s
      三角形^

      常見的線的表示方式:

      線的類型表示方式
      直線-
      虛線--
      點線:
      點劃線-.

      更多設置

      Matplotlib 支持各種靈活的設置,這里我們列舉一些常見的內容。

      設置 figure

      你可以認為Matplotlib繪制的圖形都在一個默認的 figure 中,當然了,你可以自己創建 figure,好處就是可以控制更多的參數,常見的就是控制圖形的大小,這里創建一個 figure,設置大小為 (6, 3)

      plt.figure(figsize=(63))
      plt.plot(x, y)
      plt.plot(x, y * 2)
      plt.show()

      設置標題

      來看下如何設置標題。

      plt.plot(x, y)
      plt.plot(x, y * 2)
      plt.title('sin(x) & 2sin(x)')
      plt.show()

      直接通過 plt.title 即可設置圖形標題。

      設置坐標軸

      來看下如何設置坐標軸的范圍以及名稱。

      plt.plot(x, y)
      plt.plot(x, y * 2)

      plt.xlim((0, np.pi + 1))
      plt.ylim((-33))
      plt.xlabel('X')
      plt.ylabel('Y')

      plt.show()

      通過 xlim  ylim 來設限定軸的范圍,通過 xlabel  ylabel 來設置軸的名稱。

      此外,我們也可以通過 xticks  yticks 來設置軸的刻度。

      plt.plot(x, y)
      plt.plot(x, y * 2)
      plt.xticks((0, np.pi * 0.5, np.pi, np.pi * 1.5, np.pi * 2))
      plt.show()

      設置 label 和 legend

      設置 label 和 legend 的目的就是為了區分出每個數據對應的圖形名稱。

      plt.plot(x, y, label='sin(x)')
      plt.plot(x, y * 2, label='2sin(x)')
      # plt.legend()
      plt.legend(loc='best')
      plt.show()

      添加注釋

      有時候我們需要對特定的點進行標注,我們可以使用 plt.annotate 函數來實現。

      這里我們要標注的點是 (x0, y0) = (π, 0)

      我們也可以使用 plt.text 函數來添加注釋。

      plt.plot(x, y)

      x0 = np.pi
      y0 = 0

      # 畫出標注點
      plt.scatter(x0, y0, s=50)

      plt.annotate('sin(np.pi)=%s' % y0, xy=(np.pi, 0), xycoords='data', xytext=(+30-30),
                   textcoords='offset points', fontsize=16,
                   arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))

      plt.text(0.5-0.25'sin(np.pi) = 0', fontdict={'size'16'color''r'})

      plt.show()

      對于 annotate 函數的參數,做一個簡單解釋:

      • 'sin(np.pi)=%s' % y0 代表標注的內容,可以通過字符串 %s 將 y0 的值傳入字符串;

      • 參數 xycoords='data' 是說基于數據的值來選位置;

      • xytext=(+30, -30)  textcoords='offset points' 表示對于標注位置的描述 和 xy 偏差值,即標注位置是 xy 位置向右移動 30,向下移動30;

      • arrowprops 是對圖中箭頭類型和箭頭弧度的設置,需要用 dict 形式傳入。

      使用子圖

      有時候我們需要將多張子圖展示在一起,可以使用 subplot() 實現。即在調用 plot() 函數之前需要先調用 subplot() 函數。該函數的第一個參數代表子圖的總行數,第二個參數代表子圖的總列數,第三個參數代表活躍區域。

      ax1 = plt.subplot(221# (行,列,活躍區)
      plt.plot(x, np.sin(x), 'r')

      ax2 = plt.subplot(222, sharey=ax1) # 與 ax1 共享y軸
      plt.plot(x, 2 * np.sin(x), 'g')

      ax3 = plt.subplot(223)
      plt.plot(x, np.cos(x), 'b')

      ax4 = plt.subplot(224, sharey=ax3) # 與 ax3 共享y軸
      plt.plot(x, 2 * np.cos(x), 'y')

      plt.show()

      上面的 subplot(2, 2, x) 表示將圖像窗口分為 2 行 2 列。x 表示當前子圖所在的活躍區。

      可以看到,上面的每個子圖的大小都是一樣的。有時候我們需要不同大小的子圖。比如將上面第一張子圖完全放置在第一行,其他的子圖都放在第二行。

      ax1 = plt.subplot(211# (行,列,活躍區)
      plt.plot(x, np.sin(x), 'r')

      ax2 = plt.subplot(234)
      plt.plot(x, 2 * np.sin(x), 'g')

      ax3 = plt.subplot(235, sharey=ax2)
      plt.plot(x, np.cos(x), 'b')

      ax4 = plt.subplot(236, sharey=ax2)
      plt.plot(x, 2 * np.cos(x), 'y')

      plt.show()

      簡單解釋下,plt.subplot(2, 1, 1) 將圖像窗口分為了 2 行 1 列, 當前活躍區為 1。

      使用 plt.subplot(2, 3, 4) 將整個圖像窗口分為 2 行 3 列, 當前活躍區為 4。

      解釋下為什么活躍區為 4,因為上一步中使用 plt.subplot(2, 1, 1) 將整個圖像窗口分為 2 行 1 列, 第1個小圖占用了第1個位置, 也就是整個第1行. 這一步中使用 plt.subplot(2, 3, 4) 將整個圖像窗口分為 2 行 3 列, 于是整個圖像窗口的第1行就變成了3列, 也就是成了3個位置, 于是第2行的第1個位置是整個圖像窗口的第4個位置。

      常見的圖形

      這里帶大家畫一些常見的示例圖。

      散點圖

      首先來看下如何繪制散點圖。

      k = 500
      x = np.random.rand(k) 
      y = np.random.rand(k)
      size = np.random.rand(k) * 50 # 生成每個點的大小
      colour = np.arctan2(x, y) # 生成每個點的顏色大小
      plt.scatter(x, y, s=size, c=colour)
      plt.colorbar() # 添加顏色欄

      plt.show()

      上面我們首先生成了要繪制的數據的點x  y,接下來為每個數據點生成控制大小的數組 size,然后未每個數據點生成控制顏色的數組 colour。最后通過 colorbar() 來增加一個顏色欄。

      柱狀圖

      柱狀圖我們經常會用到,我們來看下如何畫出柱狀圖,并在圖上標注出數據對應的數值。

      k = 10
      x = np.arange(k)
      y = np.random.rand(k)
      plt.bar(x, y) # 畫出 x 和 y 的柱狀圖

      # 增加數值
      for x, y in zip(x, y):
          plt.text(x, y , '%.2f' % y, ha='center', va='bottom')

      plt.show()

      生成數據 x  y 之后,調用 plt.bar 函數繪制出柱狀圖,然后通過 plt.text 標注數值,設置參數 ha='center' 橫向居中對齊,設置 va='bottom'縱向底部(頂部)對齊。

      中文亂碼解決

      Matplotlib 有個讓人惱火的問題是,默認情況下,Matplotlib 中文會亂碼。

      x = ['北京''上海''深圳''廣州']
      y = [60000580005000052000]
      plt.plot(x, y)
      plt.show()

      可以看到,上面所有的中文都亂碼了,顯示成方框了,如何解決呢?

      其實只需要配置下后臺字體即可。

      plt.rcParams['font.sans-serif']=['SimHei'#用來正常顯示中文標簽
      plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號

      plt.plot(x, y)
      plt.show()



        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 免费人成在线观看网站| 99久久免费精品国产72精品九九| 成年女人碰碰碰视频播放 | 亚洲午夜爱爱香蕉片| 亚洲欧美日韩在线码| 国产亚洲精品第一综合另类灬| 亚洲更新最快无码视频| 免费国产VA在线观看视频| 7777精品久久久大香线蕉| 99热精品毛片全部国产无缓冲| 国产欧美日韩VA另类在线播放| 国产一二三五区不在卡| 精品国产午夜福利在线观看| 亚洲国产美女精品久久久| 国产曰批视频免费观看完| 亚洲av日韩av综合在线观看| 国产在线不卡精品网站| 婷婷久久综合九色综合88| 国产美熟女乱又伦AV果冻传媒| 天堂中文8资源在线8| 国内揄拍国内精品人妻| 亚洲欧洲日韩国内精品| 久久无码人妻丰满熟妇区毛片| 欧美福利电影A在线播放| 全免费A级毛片免费看无码| 女厕精品合集KTV偷窥| 国产日韩精品中文字幕| 人妻丰满熟妇AV无码区动漫| 成年女人片免费视频播放A| 国产精品女视频一区二区| 精品无码久久久久成人漫画| 中文字幕日韩人妻一区| 亚州少妇无套内射激情视频 | 92精品国产自产在线观看481页| 午夜无码大尺度福利视频| 成人国产精品日本在线观看| 日本精品不卡一二三区| 亚洲精品无码国产片| 男人J进女人P免费视频| 免费观看欧美猛交视频黑人 | 国产午夜亚洲精品不卡下载|