Python繪圖與可視化

來源:互聯網
上載者:User

標籤:內嵌   工具包   use   匯出   new   如何   例子   info   彈出對話方塊   

Python有很多視覺化檢視,本篇只介紹Matplotlib。

Matplotlib是一種2D的繪圖庫,它可以支援硬拷貝和跨系統的互動,它可以在Python指令碼、IPython的互動環境下、Web應用程式中使用。該項目是由John Hunter於2002年啟動的,其目的是為Python構建一個MATLAB式的繪圖介面。如果結合使用一種GUI工具包(如IPython),Matplotlib還具有諸如縮放和平移等互動功能。它不僅支援各種作業系統上許多不同的GUI後端,而且還能將圖片匯出為各種常見的食量(vector)和光柵(raster)圖:PDF、SVG、JPG、PNG、BMP、GIF等。

Matplotlib程式包

 

所謂“一圖勝千言”,我們很多時候需要通過可視化的方式查看、分析資料,雖然Pandas中也有一些繪圖操作,但是相比較而言,Matplotlib在繪圖顯示效果方面更加出色。Python為Matplotlib提供了一個方便的介面,我們可以通過Pyplot對Matplotlib進行操作,多數情況下,Pyplot的命令與MATLAB有些相似。

匯入Matplotlib包進行簡單的操作(此處需要安裝pip install matplotlib):

import matplotlib.pyplot as plt#約定俗成的寫法plt#首先定義兩個函數(正弦&餘弦)import numpy as npX=np.linspace(-np.pi,np.pi,256,endpoint=True)#-π to+π的256個值C,S=np.cos(X),np.sin(X)plt.plot(X,C)plt.plot(X,S)#在ipython的互動環境中需要這句話才能顯示出來plt.show()

輸出結果:

 

繪圖命令的基本架構及其屬性設定

 

 上面的例子我們可以看出,幾乎所有的屬性和繪圖的架構我們都選用預設設定。現在我們來看Pyplot繪圖的基本架構是什麼,用過Photoshop的人都知道,作圖時先要定義一個畫布,此處的畫布就是Figure,然後再把其他素材“畫”到該Figure上。

1)在Figure上建立子plot,並設定屬性

x=np.linspace(0,10,1000)#X軸資料y1=np.sin(x)#Y軸資料y2=np.cos(x**2)#Y軸資料  x**2即x的平方plt.figure(figsize=(8,4))plt.plot(x,y1,label="$sin(x)$",color="red",linewidth=2)#將$包圍的內容渲染為數學公式plt.plot(x,y2,"b--",label="$cos(x^2)$")#指定曲線的顏色和線性,如‘b--’表示藍色虛線(b:藍色,-:虛線)plt.xlabel("Time(s)")plt.ylabel("Volt")plt.title("PyPlot First Example")‘‘‘使用關鍵字參數可以指定所繪製的曲線的各種屬性:label:給曲線指定一個標籤名稱,此標籤將在表徵圖中顯示。如果標籤字串的前後都有字元‘$‘,則Matplotlib會使用其內嵌的LaTex引擎將其顯示為數學公式color:指定曲線的顏色。顏色可以用如下方法表示       英文單詞       以‘#’字元開頭的3個16進位數,如‘#ff0000’表示紅色。       以0~1的RGB表示,如(1.0,0.0,0.0)也表示紅色。linewidth:指定許可權的寬度,可以不是整數,也可以使用縮寫形式的參數名lw。‘‘‘plt.ylim(-1.5,1.5)plt.legend()#顯示左下角的圖例plt.show()

2)在Figure上建立多個子plot

如果需要繪製多幅圖表的話,可以給Figure傳遞一個整數參數指定圖表的序號,如果所指定序號的繪圖對象已經存在的話,將不建立新的對象,而只是讓它成為當前繪圖對象。

fig1=plt.figure(2)plt.subplot(211)#subplot(211)把繪圖區域等分為2行*1列共兩個地區,然後在地區1(上地區)中建立一個軸對象plt.subplot(212)#在地區2(下地區)建立一個軸對象plt.show()

輸出結果:

我們還可以通過命令再次拆分這些塊(相當於Word中拆分儲存格操作)

f1=plt.figure(5)#彈出對話方塊時的標題,如果顯示的形式為彈出對話方塊的話plt.subplot(221)plt.subplot(222)plt.subplot(212)plt.subplots_adjust(left=0.08,right=0.95,wspace=0.25,hspace=0.45)# subplots_adjust的操作時類似於網頁css格式化中的邊距處理,左邊距離多少?# 右邊距離多少?這取決於你需要繪製的大小和各個模組之間的間距plt.show()

輸出結果:

3)通過Axes設定當前對象plot的屬性

 以上我們操作的是在Figure上繪製圖案,但是當我們繪製圖案過多,又需要選取不同的小模組進行格式化設定時,Axes對象就能很好地解決這個問題。

fig,axes=plt.subplots(nrows=2,ncols=2)#定一個2*2的plotplt.show()

輸出結果:

現在我們需要通過命令來操作每個plot(subplot),設定它們的title並刪除橫縱座標值。

fig,axes=plt.subplots(nrows=2,ncols=2)#定一個2*2的plotaxes[0,0].set(title=‘Upper Left‘)axes[0,1].set(title=‘Upper Right‘)axes[1,0].set(title=‘Lower Left‘)axes[1,1].set(title=‘Lower Right‘)# 通過Axes的flat屬性進行遍曆for ax in axes.flat:#     xticks和yticks設定為空白置    ax.set(xticks=[],yticks=[])plt.show()

輸出結果:

另外,實際來說,plot操作的底層操作就是Axes對象的操作,只不過如果我們不使用Axes而用plot操作時,它預設的是plot.subplot(111),也就是說plot其實是Axes的特例。

 4)儲存Figure對象

最後一項操作就是儲存,我們繪圖的目的是用在其他研究中,或者希望可以把研究結果儲存下來,此時需要的操作時save。

plt.savefig(r"C:\Users\123\Desktop\save_test.png",dpi=520)#預設像素dpi是80

很明顯儲存的像素越高,記憶體越大。此處只是用了savefig屬性對Figure進行儲存。

另外,除了上述的基本操作之外,Matplotlib還有其他的繪圖優勢,此處只是簡單介紹了它在繪圖時所需要注意的事項,更多的屬性設定請參考:https://matplotlib.org/api/

 

Seaborn模組介紹

 

 前面我們簡單介紹了Matplotlib庫的繪圖功能和屬性設定,對於常規性的繪圖,使用Pandas的繪圖功能已經足夠了,但如果對Matplotlib的API屬性研究較為透徹,幾乎沒有不能解決的問題。但是Matplotlib還是有它的不足之處,Matplotlib自動化程度非常高,但是,掌握如何設定系統以便獲得一個迷人的圖是相當困難的事。為了控制Matplotlib圖表的外觀,Seaborn模組內建許多定製的主題和進階的介面。

1)未加Seaborn模組的效果

import numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltnp.random.seed(sum(map(ord,"aesthetics")))#首先定義一個函數用來畫正弦函數,可協助瞭解可以控制的不同風格參數def sinplot(flip=1):    x=np.linspace(0,14,100)    for i in range(1,7):        plt.plot(x,np.sin(x+i*0.5)*(7-i)*flip)sinplot()plt.show()

輸出結果:

2)加入Seaborn模組的效果

import numpy as npimport matplotlib as mplimport matplotlib.pyplot as plt# 添加了Seaborn模組np.random.seed(sum(map(ord,"aesthetics")))#首先定義一個函數用來畫正弦函數,可協助瞭解可以控制的不同風格參數def sinplot(flip=1):    x=np.linspace(0,14,100)    for i in range(1,7):        plt.plot(x,np.sin(x+i*0.5)*(7-i)*flip)#轉換成Seaborn模組,只需要引入seaborn模組import seaborn as sns#添加Seaborn模組sinplot()plt.show()

輸出效果:

小編使用的jupyter notebook編輯器,使用與不使用Seaborn模組效果差別不明顯。

使用Seaborn的優點有:

  1. Seaborn預設淺灰色背景與白色網格線的靈感來源於Matplotlib,卻比Matplotlib的顏色更加柔和
  2. Seaborn把繪圖風格參數與資料參數分開設定。

其中,Seaborn有兩組函數對風格進行控制:axes_style()/set_style()函數和plotting_context()/set_context()函數。

axes_style()函數和plotting_context()函數返回參數字典,set_style()函數和set_context()函數設定Matplotlib。

使用set_style()函數

import seaborn as sns‘‘‘Seaborn有5種預定義的主題:darkgrid(灰色背景+白網格)whitegrid(白色背景+黑網格)dark(僅灰色背景)white(僅白色背景)ticks(座標軸帶刻度)預設的主題是darkgrid,修改主題可以使用set_style函數‘‘‘sns.set_style("whitegrid")sinplot()#即上段代碼中定義的函數plt.show()

輸出結果:

使用set_context()函數

‘‘‘上下文(context)可以設定輸出圖片的大小尺寸(scale)Seaborn中預定義的上下文有4種:paper、notebook、talk和poster預設使用notebook上下文‘‘‘sns.set_context("poster")sinplot()#即前文定義的函數plt.show()

輸出結果:

使用Seaborn“耍酷”

 然而Seaborn不僅能夠用來更改背景顏色,或者改變畫布

 

Python繪圖與可視化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.