scikit-learn機器學習常用算法原理及編程實戰》—2.5 Matplotlib簡介

      網友投稿 793 2022-05-30

      2.5? Matplotlib簡介

      Matplotlib是Python數據可視化工具包。IPython為Matplotlib專門提供了特殊的交互模式。如果要在IPython控制臺使用Matplotlib,可以使用ipython --matplotlib命令來啟動IPython控制臺程序;如果要在IPython notebook里使用Matplotlib,則在notebook的開始位置插入%matplotlib inline魔術命令即可。IPython的Matplotlib 模式有兩個優點,一是提供了非阻塞的畫圖操作,二是不需要顯式地調用show()方法來顯示畫出來的圖片。

      Matplotlib下的pyplot子包提供了面向對象的畫圖程序接口。幾乎所有的畫圖函數都與MATLAB類似,連參數都類似。在實際開發工作中,有時候甚至可以訪問MATLAB的官方文檔cn.mathworks.com/help/matlab來查詢畫圖的接口和參數,這些參數可以直接在pyplot下的畫圖函數里使用。使用pyplot的習慣性寫法是:

      from matplotlitb import pyplot as plt

      在機器學習領域中,我們經常需要把數據可視化,以便觀察數據的模式。此外,在對算法性能進行評估時,也需要把模型相關的數據可視化,才能觀察出模型里需要改進的地方。例如,我們把算法的準確度和訓練數據集大小的變化曲線畫出來,可以清晰地看出訓練數據集大小與算法準確度的關系。這就是我們需要學習Matplotlib 的原因。

      2.5.1? 圖形樣式

      通常使用IPython notebook的Matplotlib模式來畫圖,這樣畫出來的圖片會直接顯示在網頁上。要記得在notebook的最上面寫上魔術命令%matplotlib inline。

      使用Matplotlib的默認樣式在一個坐標軸上畫出正弦和余弦曲線:

      %matplotlib inline

      from matplotlib import pyplot as plt

      import numpy as np

      x = np.linspace(-np.pi, np.pi, 200)

      C, S = np.cos(x), np.sin(x)

      plt.plot(x, C)? ? ? ? ? ? ? ? ? ? ? # 畫出余弦曲線

      plt.plot(x, S)? ? ? ? ? ? ? ? ? ? ? # 畫出正弦曲線

      plt.show()

      接著,通過修改Matplotlib的默認樣式,畫出我們需要的樣式圖片。如圖2-8左側為默認樣式畫出來的正余弦曲線,右側為調整后的正余弦曲線。

      圖2-8? 正弦余弦曲線

      接下來,我們演示逐步從左側圖片過渡到右側圖片的過程。

      (1)把正余弦曲線的線條畫粗,并且定制合適的顏色:

      # 畫出余弦曲線,并設置線條顏色,寬度,樣式

      plt.plot(X, C, color="blue", linewidth=2.0, linestyle="-")

      # 畫出正弦曲線,并設置線條顏色,寬度,樣式

      plt.plot(X, S, color="red", linewidth=2.0, linestyle="-")

      (2)設置坐標軸的長度:

      plt.xlim(X.min() * 1.1, X.max() * 1.1)

      plt.ylim(C.min() * 1.1, C.max() * 1.1)

      (3)重新設置坐標軸的刻度。X軸的刻度使用自定義的標簽,標簽的文本使用了LaTeX來顯示圓周率符號π。

      # 設置坐標軸的刻度和標簽

      plt.xticks((-np.pi, -np.pi/2, np.pi/2, np.pi),

      (r'$-\pi$', r'$-\pi/2$', r'$+\pi/2$', r'$+\pi$'))

      《scikit-learn機器學習常用算法原理及編程實戰》—2.5 Matplotlib簡介

      plt.yticks([-1, -0.5, 0, 0.5, 1])

      (4)把左側圖片中的4個方向的坐標軸改為兩個方向的交叉坐標軸。方法是通過設置顏色為透明色,把上方和右側的坐標邊線隱藏起來。然后移動左側和下方的坐標邊線到原點(0, 0)的位置。

      # 坐標軸總共有4個連線,我們通過設置透明色隱藏上方和右方的邊線

      # 通過 set_position() 移動左側和下側的邊線

      # 通過 set_ticks_position() 設置坐標軸的刻度線的顯示位置

      ax = plt.gca()? ? ? ? ? ? ? ? # gca 代表當前坐標軸,即 'get current axis'

      ax.spines['right'].set_color('none')? ? ? ? ? ? # 隱藏坐標軸

      ax.spines['top'].set_color('none')

      ax.xaxis.set_ticks_position('bottom')? ? ? ? ? ? # 設置刻度顯示位置

      ax.spines['bottom'].set_position(('data',0))? ? # 設置下方坐標軸位置

      ax.yaxis.set_ticks_position('left')

      ax.spines['left'].set_position(('data',0))? ? ? # 設置左側坐標軸位置

      (5)在圖片的左上角添加一個銘牌,用來標識圖片中正弦曲線和余弦曲線。

      plt.legend(loc='upper left')

      (6)在圖片中標識出。不但把這個公式畫到圖片上,還在余弦曲線上標識出這個點,同時用虛線畫出這個點所對應的X軸的坐標。

      t = 2 * np.pi / 3

      # 畫出 cos(t) 所在的點在 X 軸上的位置,即使用虛線畫出 (t, 0) -> (t, cos(t)) 線段

      plt.plot([t, t], [0, np.cos(t)], color='blue', linewidth=1.5, linestyle="--")

      # 畫出標示的坐標點,即在 (t, cos(t))處畫一個大小為50的藍色點

      plt.scatter([t, ], [np.cos(t), ], 50, color='blue')

      # 畫出標示點的值,即 cos(t) 的值

      plt.annotate(r'$cos(\frac{2\pi}{3})=-\frac{1}{2}$',

      xy=(t, np.cos(t)), xycoords='data',

      xytext=(-90, -50), textcoords='offset points', fontsize=16,

      arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))

      其中,plt.annotate()函數的功能是在圖片上畫出標示文本,其文本內容也是使用LaTex公式書寫。這個函數參數眾多,具體可參閱官方的API說明文檔。使用相同的方法,可以在正弦曲線上也標示出一個點。

      (7)定制坐標軸上的刻度標簽的字體,同時為了避免正余弦曲線覆蓋掉刻度標識,在刻度標簽上添加一個半透明的方框作為背景。

      # 設置坐標刻度的字體大小,添加半透明背景

      for label in ax.get_xticklabels() + ax.get_yticklabels():

      label.set_fontsize(16)

      label.set_bbox(dict(facecolor='white', edgecolor='None',

      alpha=0.65))

      這樣就完成了一個Matplotlib樣式配置的過程,把默認的樣式修改成我們需要的樣式。讀者可參閱隨書代碼ch02.04.ipynb。

      機器學習 scikit-learn

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

      上一篇:那些讓程序員崩潰又想笑的程序命名...
      下一篇:分享一套golang實現的 IM 系統,一鍵部署服務端,客戶端SDK全平臺支持,可以替代IM云服務
      相關文章
      久久影院亚洲一区| 国产成人精品日本亚洲语音 | 国产亚洲精品一品区99热| 国产亚洲人成在线影院| 亚洲av色香蕉一区二区三区| 亚洲欧美日韩中文无线码| 亚洲欧美日韩国产成人| 亚洲精品日韩一区二区小说| 亚洲а∨天堂久久精品9966| 一本天堂ⅴ无码亚洲道久久| 亚洲人成网站色7799| 亚洲欧美成aⅴ人在线观看| 亚洲精品宾馆在线精品酒店| 久久精品国产亚洲av瑜伽| 女bbbbxxxx另类亚洲| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲AV成人影视在线观看| 国产色在线|亚洲| 亚洲中文字幕久久久一区| 亚洲爆乳大丰满无码专区| 精品国产亚洲一区二区三区在线观看| 亚洲爆乳精品无码一区二区| 亚洲爆乳精品无码一区二区| xvideos亚洲永久网址| 亚洲男人的天堂在线va拉文| 久久久久亚洲精品无码网址| 亚洲色成人中文字幕网站| 亚洲精品无码鲁网中文电影| 亚洲av无码精品网站| 亚洲精品无码久久久久久久| 2020亚洲男人天堂精品| 亚洲熟女乱色一区二区三区| 亚洲成AV人片高潮喷水| 亚洲日韩VA无码中文字幕| 亚洲一区二区女搞男| 亚洲an天堂an在线观看| 亚洲一区在线免费观看| 亚洲精品自偷自拍无码| 亚洲视频一区二区| 亚洲av色福利天堂| 亚洲a级片在线观看|