scikit-learn機器學習常用算法原理及編程實戰》—2.5.3 畫圖操作

      網友投稿 644 2022-05-30

      2.5.3? 畫圖操作

      本節通過一系列的例子,來演示Matplotlib的畫圖操作。首先給出最終的圖形,接著解釋思路及用到的關鍵函數,讀者可以先試著思考如何實現,對于用到的關鍵接口,可以通讀一下Matplotlib相關接口的文檔。所有的示例代碼均包含在隨書代碼ch02.05.ipynb中,讀者可以試著改變一些參數,以便學習這些參數的用法。

      在圖2-15中左圖是使用plt.scatter()函數畫出來的,需要特別關注命名參數c的使用。方法是生成一定數量的隨機點,計算隨機點的反正切np.arctan2(Y, X),把這個值作為隨機點的顏色。

      n = 1024

      X = np.random.normal(0, 1, n)

      Y = np.random.normal(0, 1, n)

      T = np.arctan2(Y, X)

      plt.subplot(1, 2, 1)

      plt.scatter(X, Y, s=75, c=T, alpha=.5)

      plt.xlim(-1.5, 1.5)

      plt.xticks(())

      plt.ylim(-1.5, 1.5)

      plt.yticks(())

      圖2-15? 畫點與填充

      對于圖2-15中的右圖,是使用plt.fill_between()函數來填充的,需要特別關注命名參數where的使用。先畫出兩條正弦曲線,在x = 0這條直線和正弦曲線之間填充指定的顏色。

      n = 256

      X = np.linspace(-np.pi, np.pi, n, endpoint=True)

      Y = np.sin(2 * X)

      plt.subplot(1, 2, 2)

      plt.plot(X, Y + 1, color='blue', alpha=1.00)

      plt.fill_between(X, 1, Y + 1, color='blue', alpha=.25)

      plt.plot(X, Y - 1, color='blue', alpha=1.00)

      plt.fill_between(X, -1, Y - 1, (Y - 1) > -1, color='blue', alpha=.25)

      plt.fill_between(X, -1, Y - 1, (Y - 1) < -1, color='red',? alpha=.25)

      plt.xlim(-np.pi, np.pi)

      plt.xticks(())

      plt.ylim(-2.5, 2.5)

      plt.yticks(())

      如圖2-16左圖,使用 plt.bar()函數來畫出柱狀圖,留意命名參數facecolor和edgecolor的使用。生成24個隨機值,調用兩次plt.bar()函數分別畫在上下兩側。再調用plt.text()函數把數值畫在對應的柱狀圖上。

      n = 12

      X = np.arange(n)

      Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)

      Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)

      plt.subplot(1, 2, 1)

      《scikit-learn機器學習常用算法原理及編程實戰》—2.5.3 畫圖操作

      plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')

      plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')

      for x, y in zip(X, Y1):

      plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va= 'bottom')

      for x, y in zip(X, Y2):

      plt.text(x + 0.4, -y - 0.05, '%.2f' % y, ha='center', va= 'top')

      plt.xlim(-.5, n)

      plt.xticks(())

      plt.ylim(-1.25, 1.25)

      plt.yticks(())

      圖2-16? 柱狀圖的等高線

      如圖2-16右圖所示,使用plt.contourf()函數填充等高線,其中命名參數cmap表示顏色映射風格。數接著用plt.contour()函數畫出等高線。需要留意np.meshgrid()函數的用法。最后使用plt.clable()函數畫出等高線上的數字。

      def f(x,y):

      return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2)

      n = 256

      x = np.linspace(-3, 3, n)

      y = np.linspace(-3, 3, n)

      X,Y = np.meshgrid(x, y)

      plt.subplot(1, 2, 2)

      plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)

      C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)

      plt.clabel(C, inline=1, fontsize=10)

      plt.xticks(())

      plt.yticks(())

      如圖2-17左圖所示,使用plt.imshow()函數把數組當成圖片畫出來,命名參數cmap用來決定數組到顏色的映射網格。最后使用plt.colorbar()函數畫出顏色條。

      圖2-17? 熱成像圖及餅圖

      def f(x, y):

      return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)

      plt.subplot(1, 2, 1)

      n = 10

      x = np.linspace(-3, 3, 4 * n)

      y = np.linspace(-3, 3, 3 * n)

      X, Y = np.meshgrid(x, y)

      plt.imshow(f(X, Y), cmap='hot', origin='low')

      plt.colorbar(shrink=.83)

      plt.xticks(())

      plt.yticks(())

      如圖2-17右圖所示,使用plt.pie()函數畫出餅圖,總共有20個餅圖,其中19個是等角度的扇形,最后一個突出的扇形是其他扇形角度的兩倍,使用命名參數explode來實現這個效果。各個扇形的填充顏色逐漸變深,使用命名參數colors來實現這個效果。

      plt.subplot(1, 2, 2)

      n = 20

      Z = np.ones(n)

      Z[-1] *= 2

      plt.pie(Z, explode=Z*.05, colors = ['%f' % (i/float(n)) for i in range(n)])

      plt.axis('equal')

      plt.xticks(())

      plt.yticks()

      如圖2-18左圖所示,使用坐標軸的set_major_locator()和set_minor_locator()方法把坐標刻度設置成MultipleLocator樣式。然后再使用坐標軸的grid()函數在坐標軸的刻度之間畫上線段,這樣就生成了我們需要的網格。

      ax = plt.subplot(1, 2, 1)

      ax.set_xlim(0,4)

      ax.set_ylim(0,3)

      ax.xaxis.set_major_locator(plt.MultipleLocator(1.0))

      ax.xaxis.set_minor_locator(plt.MultipleLocator(0.1))

      ax.yaxis.set_major_locator(plt.MultipleLocator(1.0))

      ax.yaxis.set_minor_locator(plt.MultipleLocator(0.1))

      ax.grid(which='major', axis='x', linewidth=0.75, linestyle='-', color=

      '0.75')

      ax.grid(which='minor', axis='x', linewidth=0.25, linestyle='-', color=

      '0.75')

      ax.grid(which='major', axis='y', linewidth=0.75, linestyle='-', color=

      '0.75')

      ax.grid(which='minor', axis='y', linewidth=0.25, linestyle='-', color=

      '0.75')

      ax.set_xticklabels([])

      ax.set_yticklabels([])

      圖2-18? 網格及極坐標圖

      如圖2-18右圖所示,使用plt.bar()和bar.set_facecolor()來填充不同的顏色。其中一個關鍵點是在創建子圖或坐標軸時,需要指定polar=True才能顯示出極坐標圖。

      ax = plt.subplot(1, 2, 2, polar=True)

      N = 20

      theta = np.arange(0.0, 2 * np.pi, 2 * np.pi / N)

      radii = 10 * np.random.rand(N)

      width = np.pi / 4 * np.random.rand(N)

      bars = plt.bar(theta, radii, width=width, bottom=0.0)

      for r,bar in zip(radii, bars):

      bar.set_facecolor(plt.cm.jet(r/10.))

      bar.set_alpha(0.5)

      ax.set_xticklabels([])

      ax.set_yticklabels([])

      Matplotlib有大量的細節,完整的教程都可以寫一本書。本書用到的知識不會特別復雜,掌握這些基本的知識就足夠用了。如果想深入學習Matplotlib,可以訪問官方網站 matplotlib.org。

      機器學習 scikit-learn

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:堅持寫NoSQL技術博客以來的幾點感想..
      下一篇:華為云DevCloud助力泰禾網絡科技信息化轉型
      相關文章
      亚洲精品tv久久久久久久久| 国产精品亚洲w码日韩中文| 久久国产精品亚洲综合| 亚洲人成人一区二区三区| www国产亚洲精品久久久| 亚洲欧美日韩一区二区三区| 2020年亚洲天天爽天天噜| 亚洲乱码一二三四五六区| 亚洲一卡2卡4卡5卡6卡在线99| 亚洲日本国产乱码va在线观看| 亚洲精品电影天堂网| 亚洲最大在线视频| 亚洲狠狠ady亚洲精品大秀| 亚洲人成影院在线无码观看| 亚洲国产精品日韩专区AV| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 亚洲成AV人在线观看网址| 亚洲人成电影在线播放| 亚洲熟妇少妇任你躁在线观看无码| 亚洲爽爽一区二区三区| 亚洲熟女少妇一区二区| 亚洲2022国产成人精品无码区 | 亚洲国产aⅴ成人精品无吗| 久久久久久亚洲精品无码| 亚洲国产午夜中文字幕精品黄网站| 亚洲国产精品专区在线观看| 激情97综合亚洲色婷婷五| 久久亚洲高清观看| 亚洲伊人tv综合网色| 亚洲人妖女同在线播放| 亚洲一区二区三区成人网站 | 亚洲视频中文字幕| 亚洲国产成人精品无码一区二区 | 在线观看亚洲精品福利片| 久久精品国产亚洲AV麻豆王友容 | 亚洲第一精品电影网| 亚洲天堂2017无码中文| 亚洲爆乳AAA无码专区| 亚洲精品国产日韩无码AV永久免费网 | 亚洲ts人妖网站| 亚洲.国产.欧美一区二区三区|