1. 程式人生 > >Python資料分析之資料視覺化

Python資料分析之資料視覺化

資料視覺化是資料分析很重要的一部分,它能幫助我們更好的從繁雜的資料中更直觀更有效的獲取資訊。
matplotlib是用來建立圖表的工具包之一。其目的是為Python構建一個Matlab式的繪圖介面,初次接觸的時候我就感覺這貨跟matlab畫的圖表很相似。雖說其直接建立的圖不是那麼的高大上,但是matplotlib確是視覺化必須要掌握的基礎。

matplotlib API入門

引入:

#在Anaconda的out中可以直接畫出圖。
%matplotlib inline 
#引入pyplot
import matplotlib.pyplot as plt

Figure和Subplot

matplotlib的影象都位於Figure物件中。建立一個新的Figure:fig = plt.figure()
建立完Figure後必須要add_subplot來建立一個或多個subplot才行:ax1 = fig.add_subplot(2,2,1)(2,2,1)的意思是建立2X2的影象,且當前選擇4個subplot中的第一個。如果把後面的也創建出來如下所示(這部分感覺就和matlab很像了):

ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)

這裡寫圖片描述

帶有三個subplot的Figure

那麼開始繪圖:

from numpy.
random import randn plt.plot(randn(50).cumsum(),'k--') _ = ax1.hist(randn(100),bins=20,color = 'k',alpha = 0.3) ax2 = scatter(np.arange(30),np.arange(30)+3*randn(30))

這裡寫圖片描述

  繪圖後的Figure

建立Firure和subplot可以用更簡便的方法:axes = plt.subplots(2,3)直接建立一個2X3的影象。
然後把axes當成二維陣列一樣用axes[0,1]來獲取subplot例項進行操作。同時,你還可以通過sharex和sharey指定subplot應該具有相同的x軸或者y軸,這時用來比較相同範圍的資料時會相當的方便。axes = plt.subplots(2,3,sharex = True)

調整subplot周圍的間距

如上面的圖所示,一般情況下,matplot會在subplot周圍留下一定的邊距。當你不需要或者想要調整時可以使用下面這個subplots_adjust方法:

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

其中wspace和hpace用來控制寬度和高度的百分比。

axes = plt.subplots(2,3)
plt.subplots_adjust( wspace =None,hspace = 0 )

雖說圖看上去很醜,但是可以很明顯看出,hspace代表相鄰的subplot之間的高度百分比。

這裡寫圖片描述

   調整subplot周圍的間距後

顏色、標記和線型

上面我們就用過k–其實這個的含義就是k黑色,–為虛線。或者更明確的寫引數linestyle= ‘–’,color=’k’是同樣的效果。指明顏色也可以使用RGB值(如’#CECECE’)。

有時我們需要強調每個真實資料點的值,而不只是一條線時可以使用’ko–’,加個o。

預設兩個資料點之間是直線連線的,如果想要改變可以使用引數drawstyle,例如drawstyle = ‘step-post’效果不演示了,有興趣可以試試看。

標題、刻度、標籤

對於大多數的圖表裝飾項,其主要實現方式有二:使用過程型的pyplot介面(MATLAB使用者非常熟悉)以及更為面向物件的原生matplotlib API.
pyplot介面的設計目的就是互動式使用,含有諸如xlim, xticks和xticklabels之類的方法。它們分別控制圖表的範圍、刻度位置、刻度標籤等。其使用方式有以下兩種:
1. 呼叫時不帶引數.則返回當前的引數.例如,plt.xlim()返回當前的X軸繪圖範圍。
2. 呼叫時帶引數,則設定引數流.因此.plt.xlim([0, 10])會將X軸的範圍設定為0 到10.
修改刻度:set_xticks,set_xticklabels。前者負責相對位置,後者負責具體的刻度顯示值。
修改標題:set_title
修改X軸名稱:set_xlabel

註解以及在Subpplot上繪圖

註解(text,arrow,annotate):ax.text(x,y,'hello world!',family = 'monospace', fontsize = 10)
用法多種多樣,甚至可以畫個箭頭指向你加註解的點上哦。

繪製圖形:這個是通過建立shp塊物件然後把它ax.add_patch(shp)來實現。
例如繪製一個圓形再加上去:

flg = plt.figure()
ax = flg.add_subplot(1,1,1)
(0.7,0.2)為圓心,0.15為半徑,顏色為藍色,alpha為透明度
circ = plt.Circle((0.7,0.2),0.15,color = 'b',alpha = 0.3)
ax.add_patch(circ)

儲存圖表到檔案

儲存為figpath.svg檔案,svg格式。plt.savefig(‘figpath.svg’)
或者不一定要寫入磁碟,寫入任何檔案型的物件都是可行的,比如StringIO:

from io import StringIO
buffer = StringIO()
plt.savefig(buffer)
plot_data = buffer.getvalue()

Figure.savefig還有一些引數及說明如下:
這裡寫圖片描述

  Figure.savefig的選項

matplotlib配置

通過這個配置,你可以設定生成影象的預設大小,預設的xtick,legend等等。
比如設定預設大小為10X10,你可以執行:plt.rc(‘figure’,figsize = (10,10))

rc的第一個引數是希望自定義的物件.如’figure’. ‘axes’, ‘xtick’. ‘ytick’、’grid’、’legend’等.其後可以跟上一系列的關鍵字引數.最簡單的辦法是將這些選項寫成一個字典:

font_options = {'family''monospace','weight':'bold','size':'small'}
plt.rc('font', **font options)

要了解全部的自定義選項,請查閱matplotlib的配置檔案matplotlibrc(位於matplotlib/mpl-data目錄中)。如果對該檔案進行了自定義,並將其放在你自己的.matplotlibrc目錄中,則每次使用matplotlib時就會載入該檔案.

總結

這章節初步的介紹了matplotlib的API,基本會用來生成一些簡單的線性圖然後修改一些圖表上的顯示,和突出效果等等。