數據可視化
matplotlib繪圖入門
為了使用matplotlib來繪制基本圖像,需要調用matplotlib.pyplot子庫中的plot()函數
import matplotlib.pyplot as plt import numpy as np x=np.linspace(0,20) plt.plot(x,.5+x) plt.plot(x,1+2*x,'--') plt.show()
對數圖
所謂對數圖,實際上就是使用對數坐標繪制的圖形。對於對數刻度來說,其間隔表示的是變量的值在數量級上的變化,這與線性刻度有很大的不同。對數圖又分為兩種不同的類型,其中一種稱為雙對數圖,它的特點是兩個坐標軸都采用對數刻度,對應的matplotlib函數是matplotlib.pyplot.loglog()。半對數圖的一個坐標軸采用線性標度,另一個坐標軸使用對數刻度,它對應的matplotlib API是semilogx()函數和smilogy()函數。在雙對數圖上,冪律表現為直線;在半對數圖上,直線則代表的是指數律。
numpy中的polyfit()函數可以用多項式來擬合數據
numpy中的polyval()函數可以用來對上面得到的多項式進行評估。
散點圖
散點圖可以形象展示直角坐標系中兩個變量之間的關系。在散點圖中,每個數據點的位置實際上就是兩個變量的值。變量之間的任何關系可以拿散點圖來示意。上升趨勢模式通常意味着正相關。泡式圖是對散點圖的一種擴展。在泡式圖中,每個數據點都被一個氣泡所包圍,它由此得名;而第三個變量的值正好可以用來確定氣泡的相對大小。
matplotlib API提供的scatter()函數就是用於實現散點圖
圖例和注解
數據圖都帶有下列輔助信息
1.用來描述圖中各數據序列的圖例。為此,可以使用matplotlib提供的legend()函數,來給每個數據序列提供相應的標簽
2.對圖中要點的注解。為此,可以借助matplotlib提供的annotate()函數。matplotlib生成的注解包括標簽和箭頭兩個組成部分。這個函數提供了多個參數,用以描述標簽和箭頭形式以及其位置。
3.橫軸和縱軸的標簽。這些標簽可以通過xlabel()和ylabel()函數繪制出來
4.一個說明性質的標題,通常由matplotlib的title()函數來提供
5.網格,對於輕松定位數據點非常有幫助。matplotlib提供的grid()函數可以用來決定是否啟用網格
三維圖
Axes3D是由matplotlib API提供的一個類,可以用來繪制三維圖。通過講解這個類的工作機制,就能夠明白面向對象的matplotlib API的原理。matplotlib的figure類是存放各種圖像元素的頂級容器。
1.創建一個Figure對象
fig=plt.figure()
2.利用Figure對象創建一個Axes3D對象
ax=Axes3D(fig)
3.創建坐標矩陣時,可以借助Numpy中的meshgrid()函數
X,Y=np.meshgrid(X,Y)
4.通過Axes3D類的plot_surface()方法為數據繪制圖像
ax.plot_surface(X,Y,Z)
5.根據面向對象API函數的命名約定,應該以set_開頭,以程序對應的函數名結尾,具體如下:
ax.set_xlabel('year') ax.set_ylabel('Log1') ax.set_zlabel('Log2') ax.set_title('66666')
pandas繪圖
pandas的series類和DataFrame類中的plot()方法都封裝了相關的matplotlib函數
為了創建半對數圖,需要增設logy參數
df.plot(logy=True)
為了創建散點圖,需要把參數kind設為scatter,同時,還要指定兩個列。此外,如果將參數loglog設為True,就會生成一個雙對數(log-log圖)
df[df['gpu_trans_count']>0].plot(kind='scatter',x='trans_count',y='gpu_trans_count',loglog=True)
時滯圖
時滯圖實際上就是一幅散點圖,只不過把時間序列的圖像及相同序列在時間軸上后延的圖像放在一起展示而已。
我們可以利用pandas子庫pandas.tools.plotting中的lag_plot()函數,來繪制時滯圖
lag_plot(df['trans_count'])
自相關圖
自相關圖描述的是時間序列數據在不同時間延遲情況下的自相關性。所謂自相關,就是一個時間序列與相同數據在不同時間延遲情況下的相互關系。利用pandas子庫pandas.tools.plotting中的autocorrelation_plot()函數,就可以畫出自相關圖了。