IPython繪圖和可視化---matplotlib 入門


 最近總是需要用matplotlib繪制一些圖,由於是新手,所以總是需要去翻書來找怎么用,即使剛用過的,也總是忘。所以,想寫一個入門的教程,一方面幫助我自己熟悉這些函數,另一方面有比我還小白的新手可以借鑒,大神就繞路吧。這篇文章是根據《利用Python進行數據分析》總結出來的,不是很全面,但是作為入門,足夠了。

首先,需要能啟動IPython 交互界面吧,這個如果還沒有啟動的話,就自行百度吧。

如果安裝了Anaconda,那么以這種方式啟動IPython吧。

 

這樣會將IPython配置為使用你所指定的matplotlib GUI 后端(Tk,wxPython,PyQt,Mac OS X native,GTK)。【雖然不知道這些都是些什么,不過打開pylab就夠用了】

matplotlib 不是太長了嗎,我們通常引入這樣的約定:

import matplotlib.pyplot as plt

就是個縮寫嘛,大多數高端人員也遵循這個約定,咱就服從吧。

首先,我們來繪制一個figure對象。

立馬就會生成一個這樣的窗口:

好,這是第一步。

但是不能通過空figure繪圖。必須使用add_subplot()創建一個或多個subplot才行。

看以上三行代碼,figure變成了這樣:

這三行代碼的意思是:圖像是2X2的,且當前選中是4個中的第n個。(222)就是2X2 中的第二2,(2,2,3)就是2X2中的第三個。可分割也可不分割,當超過10的話需要分割了吧。

好,第二步也成功做完了。接下來,發出一條繪圖命令。如plt.plot([1.5, 2, 4, -2, 1.6])   #繪制幾個點連接

我們來試一下。 

 

 恩,此時matplotlib就會在最后一個用過的subplot(如果沒有則創建一個)上面進行繪制。

這幾步完成的還不錯吧,那下面我們再進一步探索。

*************************************************分割線****************************************************

 

我們運行一下這兩行代碼:

from numpy.random import randn #導入隨機模塊
plt.plot(randn(50).cumsum(), 'k--')

其實就是在0到50隨機生成一個數組,然后繪制在最后一個用過的subplot里面,注意是線段類型,虛線。

那如何繪制圖像在其他的subplot里面呢?下面就演示如何做。

ax1.hist(randn(100), bins  = 20, color = 'k', alpha = 0.3) 

ax2.scatter(np.arange(30), np.arange(30)  + 3 * randn(30))

 

至此,應該能非常熟練的在figure對象中繪圖了吧。

還可以在matplotlib的文檔中找到各種圖表類型。

**********************************************分割線**********************************************************

由於根據特定布局創建Figure和subplot是一件很常見的任務,於是便出現了一個更為方便的方法。

fig, axes = plt.subplots(2, 3)

這樣,一步就完成上節兩步完成的工作。

-----------------------------------------------------------------------

pyplot.subplots有幾個選項

nrows:subplot的行數

ncols:subplot的列數

sharex:所有subplot共享x軸刻度

sharey:所有subplot共享Y軸刻度

subplot_kw:用於創建各subplot的關鍵字字典

**fig_kw:創建figure時的其他關鍵字,如plt.subplots(2,2,figuresize=(8,6))

-------------------------------------------------------------------------

 

加了參數,共享x軸y軸。

我們再試着調整一下subplot周圍的邊距。

Figure有一個頂級函數subplot_adjust。

subplots_adjust(left = None, bottom = None, right  = None, top = None, wsapce = None, hspace = None )

wspace 和 hspace是控制寬度和高度的百分比。下面將間距收縮到了0.

又是新知識吧。接下來,學習顏色和線型。

 ************************************分割線**************************************************

 新建一個fig

fig = plt.plot()

 

再新建一個fig

 data = randn(30).cumsum()

plt.plot(data, 'k--', label = 'Default')

plt.plot(data, 'k-', drawstyle = 'steps-post', label = 'steps-post')

plt.legend(loc='best')  #在合適的位置放置圖例。

設置標題,軸標簽,刻度以及刻度標簽。

fig = plt.figure()

ax = fig.add_subplot(111)

ax.plot(randn(1000).cumsum())

 

隨機漫步。我們來給上圖添加標簽。

ticks = ax.set_xtickets([0, 250, 500, 750, 1000])

可以看出,x標簽變成我們制定的標簽。y軸標簽可想而知了。

再來設置title

ax.set_title('My First matplotlib plot')

再用set_xlabel為X軸設置一個名稱。

ax.set_xlabel('Stages')

Y軸的跟X軸幾乎是一樣的。再小白也能看懂吧。

添加圖例(legend):

 

 上面兩張圖是一樣的,后面只是上面圖放大了,注意圖例的位置。

ax.legend(loc = 'best')  #會選擇一個最不礙事的位置。

要從圖例中去除一個或多個元素,不傳入label或傳入lable = '_nolegend_' 

還有一些這樣的選項。

 ***************************************************分割線*****************************************************

又上一層樓。 嘻嘻。

好了,一口氣寫這么些,后面的再慢慢更新吧。

今天接着入門,白小白可以看,大神繞路。

***************************************************分割線*****************************************************

今天接着入門,白小白可以看,大神繞路。

今天以畫圖開始。

畫個長方形,三角形,圓形(橢圓)。

Matplotlib有一些表示常見圖形的對象,這些對象被稱為塊(patch)。完整的集合位於matplotlib.patches。

fig = plt.figure()

ax = fig.add_subplot(111)

 

rect = plt.Rectangle((0.2,0.75), 0.4, 0.15, color = ‘r’, alpha = 0.3)#左下起點,長,寬,顏色,α

circ = plt.Circle((0.7,0.2), 0.15, color = ‘b’, alpha = 0.5)#圓心,半徑,顏色,α

pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]], color = ‘g’, alpha = 0.5 )#頂點坐標顏色α

α表示的是圖表的填充不透明度。在(0,1)之間。

 

ax.add_patch(rect)

ax.add_patch(circ)

ax.add_patch(pgon)

 

 

 

補充一個:如何在圖上指定位置添加文本、箭頭,或其他圖形呢?

答:可以通過text、arrow、annotate等函數進行添加。下面看一個添加文本的例子。

ax.text(0.7, 0.6, ‘Hello World!’, family = ‘monospace’, fontsize = 10)

 

 

可以看到圖片里面指定位置有我們添加的文字信息。

那生成了圖表文件怎么保存呢?

利用plt.savefig可以將當前圖表保存到文件。

Plt.savefig(‘figpath.svg’, dpi = 400, bbox_inches = ‘tight’ )

#文件類型是通過文件擴展名推斷出來的,可以保存為.pdf.

Dpi是 ‘每英寸點數’分辨率,bbox_inches可以剪除當前圖表周圍的空白部分

 

 

保存到了一個.pdf的文件中。

Figure.savefig有一下選項:

Fname: 含有路徑的字符串或python文件型對象。.pdf,.png根據擴展名推斷得出。

dpi: 圖像分辨率(每英寸點數),默認為100

facecolor,edgecolor: 圖像的背景色,默認為‘w’(白色)

format: 顯式設置文件格式(‘png’,‘pdf’,‘svg’,‘ps’,‘eps’…)

bbox_inches:圖表需要保存的部分。如果設置為‘tight’,則嘗試剪除圖表周圍的空白部分。

***********************分割線********************************

Matplotlib實際上是一種比較低級的繪圖工具。要組裝一章圖表,你得用它的各種基礎組件才行。下面介紹一下pandas中的繪圖函數。簡單入門級別的集中。

************************分割線*******************************

線型圖:

Series和DataFrame都有一個用於生成各類圖表的plot方法。默認情況下,他們所生成的是線型圖。

s = Series(na.random.randn(10).cumsum(), index = np.arange(0,100,10))

s.plot()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM