簡介:做信息可視化是數(shù)據(jù)分析中最重要的任務(wù)之一??梢暬赡苁强碧竭^程的一部分,例如,幫助識別異常值或所需的數(shù)據(jù)轉(zhuǎn)換,或者為建模提供一些思路。對于其他人來說,構(gòu)建交互式網(wǎng)絡(luò)可視化可能是最終目標(biāo)。Python有很多附加的庫可以用來制作靜態(tài)或動態(tài)可視化文件,但我將主要關(guān)注matplotlib和基于它的庫。
本文摘自《Python數(shù)據(jù)分析》第二版。如需轉(zhuǎn)載,請聯(lián)系我們
Matplotlib是一個桌面繪圖包,用于生成發(fā)布質(zhì)量圖表。本項目由約翰·亨特于2002年發(fā)起,旨在Python環(huán)境下以MATLAB風(fēng)格繪圖。Matplotlib和IPython社區(qū)合作,簡化IPython shell的交互繪圖。Matplotlib支持所有操作系統(tǒng)上的各種GUI后端,也可以將可視化導(dǎo)出為所有常用的矢量和光柵圖形格式。).
隨著時間的推移,Mapplotlib產(chǎn)生了一些額外的數(shù)據(jù)可視化工具包,并使用Mapplotlib繪制底層。
學(xué)習(xí)以下示例代碼最簡單的方法是在Jupyter筆記本中使用交互式繪圖。設(shè)置時,需要在Jupyter筆記本中執(zhí)行以下語句:
%matplotlib筆記本
00 matplotlib API簡明介紹
使用matplotlib時,我們使用以下導(dǎo)入約定:
in在In Out:數(shù)組中:數(shù)據(jù): data =np.arange中:作為np導(dǎo)入:importmatplotlib . py plot as PLT
在Jupyter中運行% mapplotlib筆記本,我們可以嘗試生成一個簡單的圖形。如果所有設(shè)置都正確,將出現(xiàn)如圖1所示的圖形:
在中:plt.plot
▲圖1簡單線性圖
雖然seaborn等庫和熊貓內(nèi)置的繪圖功能可以處理大部分普通的繪圖細節(jié),但是如果想自定義除了提供的功能選項之外,還需要學(xué)習(xí)一些matplotlib的AIP。
本文沒有足夠的篇幅全面介紹matplotlib的函數(shù)寬度和深度。但是介紹應(yīng)該足夠讓你入門了。Matplotlib的可視化作品庫和文檔是學(xué)習(xí)高級功能的最佳資源。
01圖片和子圖
matplotlib繪制的地圖位于Figure對象中。您可以使用plt.figure生成新圖片:
in:fig = PLT . fig
在IPython中,會出現(xiàn)一個空白色的繪圖窗口,但是在Jupyter中什么都不會顯示,直到我們使用一些其他的命令。Plt.figure有一些選項,例如,figure size是為了確保圖片存儲在硬盤上時有一定的大小和縱橫比。
不能用空白圖畫畫。您需要使用add_subplot創(chuàng)建一個或多個子圖:
in:fig = PLT . fig
In : ax1 =fig.add_subplot
上面代碼的意思是圖片應(yīng)該是2*2,我們已經(jīng)選擇了四位數(shù)中的第一位。如果您隨后創(chuàng)建兩個子圖,您將得到一個如圖2所示的可視化效果:
In : ax2 =fig.add_subplot
In : ax3 =fig.add_subplot
▲圖2 a 空帶三個子圖的白色matplotlib圖
使用Jupyter筆記本有一個細節(jié)需要注意。每個單元格運行后,圖表會重置。因此,對于更復(fù)雜的圖表,您必須將所有繪圖命令放在一個筆記本單元格中。
我們在同一個單元格中運行以下代碼:
圖=plt.figure
ax1 =fig.add_subplot
ax2 =fig.add_subplot
ax3 =fig.add_subplot
當(dāng)您輸入繪圖命令plt.plot時,matplotlib將在最后一個圖片和子圖片上繪圖,從而隱藏圖片和子圖片的創(chuàng)建。因此,如果我們添加以下代碼,您將獲得如圖3所示的可視化效果:
in:PLT . plot。cumsum,' k -')
▲圖3單個子圖繪制的數(shù)據(jù)可視化
“K-”是繪制黑色分段線的樣式選項。圖add _ plot返回的對象是AxesSubplot對象。有了這些對象,就可以在其他空白色子圖上直接調(diào)用對象的實例方法進行繪制:
in:_ = ax1 . hist,bins = 20,color='k ',alpha=0.3)
In : ax2 .散點,NP . arange+3 * NP . random . randn)
▲圖4添加子圖后的數(shù)據(jù)可視化
可以在matplotlib的官方文檔中找到完整的圖形類型。
使用子圖網(wǎng)絡(luò)創(chuàng)建圖片是一個非常常見的任務(wù),所以matplotlib包含了一個方便的方法PLT . subtracts,它創(chuàng)建一個新的圖片,然后返回包含生成的子圖對象的NumPy數(shù)組:
在:圖中,軸=plt .支線劇情
在軸上
Out:
數(shù)組
參數(shù)
形容
nrows
子圖中的行數(shù)
ncols
子圖的列號
sharex
所有子圖使用相同的X軸比例
sharey
所有子圖都使用相同的y軸比例
支線劇情_kw
傳入add_subplot的關(guān)鍵字參數(shù)字典,用于生成子圖
* *圖_kw
生成圖片時使用的附加關(guān)鍵字參數(shù),如PLT。子組件)
▲表1 pyplot .支線劇情選項
調(diào)整子圖周圍的間距
默認情況下,matplotlib在子圖的外部與子圖之間留有一定的距離。該間距是相對于圖形的高度和寬度指定的,因此如果您通過編程或手動使用圖形用戶界面窗口來調(diào)整圖形的大小,圖形將自動調(diào)整。您可以在圖形對象上使用子情節(jié)_調(diào)整方法來更改間距,也可以將其用作頂級函數(shù):
子情節(jié)_調(diào)整
Wspace和hspace分別控制圖片的寬度和高度百分比,可以作為子圖片之間的距離。這里有一個小例子,我將把這個差距縮小到零:
圖,軸= plt .子圖
對于范圍中的I:
對于范圍中的j:
軸。hist,bins = 50,color = 'k ',alpha = 0.5)
PLT . subtracts _ adjust
▲圖5無內(nèi)部子圖區(qū)間的數(shù)據(jù)可視化
您可能會注意到軸標(biāo)簽重疊。Matplotlib不檢查標(biāo)簽是否重疊,因此您需要在類似情況下通過明確指定比例位置和比例標(biāo)簽來固定軸標(biāo)簽。
02顏色、標(biāo)記和線型
matplotlib的主函數(shù)圖接收一個帶有x和y周的數(shù)組和一些可選的字符串縮寫參數(shù),以指示顏色和線型。例如,要用綠色虛線畫一條從x到y(tǒng)的線,您需要執(zhí)行以下操作:
ax.plot
這種在字符串中指定顏色和線條樣式的方式很方便。實際上,如果以編程方式創(chuàng)建繪圖,可能不希望混合字符串來創(chuàng)建具有所需樣式的圖表。同樣的圖表可以用更明確的方式表達:
ax.plot
ax.plot
常見顏色有許多顏色縮寫,但您可以通過指定十六進制顏色代碼來指定任何顏色。參考plot函數(shù)的文檔字符串可以看到所有的行類型。
折線圖也可以標(biāo)記為突出顯示實際數(shù)據(jù)點。因為matplotlib創(chuàng)建了一個連續(xù)的折線圖,所以有時不清楚插入點在哪里。標(biāo)記可以是樣式字符串的一部分,樣式字符串中的線型和標(biāo)記類型必須遵循顏色:
in:from numpy . random import randn
In : plt.plot。cumsum,' ko -')
▲圖6帶標(biāo)記的折線圖
上面的代碼可以寫得更明白:
圖)。cumsum,color='k ',linestyle= '虛線',marker='o ')
對于折線圖,您會注意到默認情況下后續(xù)點是線性插值的。您可以通過drawstyle選項更改它:
In : data =np.random.randn。cumsum
在中:plt.plot
out:
In : plt.plot
out:
In : plt.legend
▲圖7不同繪圖風(fēng)格選項下的折線圖
您可能會注意到,運行代碼后會有這樣的輸出。matplotlib返回的對象是指剛剛添加的圖表子組件。很多時候,您可以放心地忽略這些輸出。在這里,因為我們將標(biāo)簽傳遞給了繪圖,所以我們可以使用plt.lengend為每一行生成一個圖例來區(qū)分。
無論是否在用數(shù)據(jù)繪圖時傳遞lebel選項,都必須調(diào)用plt.lengend生成圖例來生成圖例。
03比例尺、標(biāo)簽和圖例
大多數(shù)圖形修改工作有兩種主要方式:使用編程pyplot接口和更面向?qū)ο蟮谋緳Cmatplotlib API。
Pyplot界面設(shè)計為交互式使用,包括xllim、xtick和xtcklabels等方法。這些方法分別控制繪圖范圍、比例位置和比例標(biāo)簽。我們可以通過兩種方式使用它:
在沒有函數(shù)參數(shù)的情況下調(diào)用,返回當(dāng)前的參數(shù)值返回當(dāng)前的x軸繪圖范圍 )。傳入?yún)?shù)的情況下調(diào)用,并設(shè)置參數(shù)值會將x軸的范圍設(shè)置為0到10)。所有這些方法都將在當(dāng)前活動或最近創(chuàng)建的AxeSubplot上生效。這些方法中的每一種都對應(yīng)于子圖本身的兩種方法;Xlim對應(yīng)ax.get_lim和ax.set_lim。我更喜歡使用plot的實例方法,因為它更顯而易見,但是當(dāng)然你可以使用更方便的方法。
1.設(shè)置標(biāo)題、軸標(biāo)簽、刻度和刻度標(biāo)簽
為了解釋軸定制,我將生成一個簡單的圖表,并繪制一個隨機漫步:
in:fig = PLT . fig
In : ax = fig.add_subplot
in:ax . plot。cumsum)
▲圖8顯示了一個簡單的X軸圖表
改變x軸比例最簡單的方法是使用set _ XT signs和set _ xticklebels。Set _ xticks表示在數(shù)據(jù)范圍內(nèi)設(shè)置刻度的位置;默認情況下,這些秤也有標(biāo)簽。但是我們可以使用set_xticklabels為標(biāo)簽賦值:
In :刻度= ax . set _ XT picks
in:labels = ax . set _ xticklabels
旋轉(zhuǎn)選項將x軸刻度標(biāo)簽旋轉(zhuǎn)30度。最后,set_xlabel將給x軸命名,set_titel給子圖命名:
在: ax.set_title
out:& lt;matplotlib.text.Text在0x7fb624d055f8 >處;
In : ax.set_xlabel
▲圖9 X軸刻度的簡單示例
修改y軸坐標(biāo)也是同樣的過程,所以可以用y替換上例中的x,軸的類型有一個設(shè)置方法,允許批量設(shè)置繪圖屬性。根據(jù)前面的例子,我們可以編寫以下代碼:
道具={
標(biāo)題:“‘我的第一個matplotlib情節(jié)’,
xlabel:“‘階段’
}
ax . set
2.添加圖例
圖例是用來區(qū)分繪圖元素的重要內(nèi)容。添加一個傳說的方法有很多。最簡單的方法是在添加每個圖表時傳遞標(biāo)簽參數(shù):
in:from numpy . random import randn
in:fig = PLT . fig;ax =fig.add_subplot
在中:ax.plot。cumsum,' k ',label='one ')
out:
在中:ax.plot。cumsum,' k -',label='two ')
out:
在中:ax.plot。cumsum,' k . ',label = ' three ')
out:
運行上述代碼后,還可以調(diào)用ax.legend或plt.legend來自動生成一個圖例。結(jié)果圖表見圖10:
In : ax.legend
▲圖10是一個簡單的圖表,有三條虛線和圖例
圖例方法還有其他幾個位置參數(shù)loc。參考文檔字符串了解更多信息。
loc參數(shù)告訴matplotlib放置圖表的位置。如果不挑剔的話,‘最好’是個不錯的選擇,它會自動選擇最合適的位置。如果取消圖例中的元素,請不要傳入label參數(shù)或傳入label='_nolegend_ '。
04注釋和子圖處理
除了標(biāo)準(zhǔn)繪圖類型之外,您可能希望在圖表上繪制自己的注釋,注釋可能包含文本、箭頭和其他圖形。您可以使用文本、箭頭和注釋方法來添加注釋和文本。文本在圖表上給定坐標(biāo),根據(jù)可選的自定義樣式繪制文本:
ax.text
注釋可以同時繪制文本和箭頭。舉個例子,我們來繪制一下2007年以來標(biāo)準(zhǔn)普爾500指數(shù)的收盤價,并在圖表中標(biāo)出2008年到2009年金融危機中的重要日期。你可以在Jupyter筆記本的一個單元格中復(fù)制這些代碼。參考圖11中的代碼運行結(jié)果:
fromdatetime importdatetime
圖=plt.figure
ax =fig.add_subplot
data = PD . read _ CSV
spx =數(shù)據(jù)
spx.plot
危機_數(shù)據(jù)=
fordate,label incrisis_data:
ax . annotation +75),
xytext= +225),
arrowprops = dict,
水平對齊= '左',垂直對齊= '上')
#放大2007-2010年
ax.set_xlim
ax.set_ylim
▲圖11 2008-2009年金融危機的重要日期
圖表中有一些重要的點需要突出顯示:ax.annotate方法可以在指定的X和Y坐標(biāo)上繪制標(biāo)簽。我們可以使用set_xlim和set_ylim方法來手動設(shè)置圖表的邊界,而不是使用matplotlib的默認設(shè)置。最后,ax.set_title給圖表添加一個主標(biāo)題。
參考網(wǎng)上matplotlib展廳了解更多標(biāo)注實例。
畫圖形要注意的點比較多。Matplotlib包含表示各種常見圖形的對象,這些對象的引用是面片。有些圖形,比如矩形和圓形,可以在matplotlib.pyplot中找到,但是完整的圖形集是在matplotlib.patches中找到的
當(dāng)您想要向圖中添加一個圖時,您需要生成一個補丁對象shp,并調(diào)用ax.add_patch將其添加到子圖中:
圖=plt.figure
ax =fig.add_subplot
rect =plt。矩形,0.4,0.15,顏色='k ',α= 0.3)
circ =plt。圓,0.15,顏色='b ',α= 0.3)
pgon =plt。多邊形
ax.add_patch
ax.add_patch
ax.add_patch
▲圖12三種不同補丁圖形的可視化
當(dāng)您看到許多常見繪圖類型的實現(xiàn)時,您會發(fā)現(xiàn)它們都是由補丁組裝而成的。
05將圖片保存到文件中
您可以使用plt.savefig將活動圖片保存到文件中。這個方法相當(dāng)于圖片對象的savefig實例方法。例如,要將圖片保存為SVG,您只需輸入以下代碼:
plt.savefig
文件類型是從文件擴展名推斷出來的。所以如果你用。pdf,你會得到一個PDF。我經(jīng)常用幾個重要選項發(fā)布圖形:dpi,控制每英寸點數(shù)的分辨率;Bbox_inches,可以修剪實際圖形的空白色。為了得到同樣的PNG圖片,使用最小的空400 DPI的白色,需要運行以下代碼:
plt.savefig
Savefig不能寫入硬盤,它可以將圖片寫入所有文件對象,如BytesIO:
fromio importBytesIO
buffer=BytesIO
plt.savefig
plot_data =buffer.getvalue
表2是保存圖的其他選項列表:
參數(shù)
形容
fname
包含文件路徑或Python文件類型對象的字符串。圖像格式是從文件擴展名
dpi
每英寸點數(shù)的分辨率;默認值為100,但可以進行配置
facecolor,edgecolor
子圖外部圖形背景的顏色;默認為‘w’
格式
文件格式
bbox _英寸
要保存的圖片范圍;如果您通過“通過”,圖片空周圍的白色部分將被刪除
▲表2圖.保存圖選項
06 matplotlib設(shè)置
Matplotlib配置了配色方案和默認設(shè)置,主要用于準(zhǔn)備圖片發(fā)布。幸運的是,幾乎所有的默認行為都可以通過廣泛的全局參數(shù)進行定制,包括圖形大小、子圖間距、顏色、字體大小、網(wǎng)格樣式等等。使用rc方法是通過Python編程修改配置的一種方式。例如,要將全局默認數(shù)字大小設(shè)置為10×10,您可以輸入:
plt.rc)
rc的第一個參數(shù)是你要定制的組件,比如' figure ',' axes ',' xtick ',' ytick ',' grid ',' legend '等等。之后可以根據(jù)關(guān)鍵字參數(shù)的順序指定新的參數(shù)。字典是在程序中設(shè)置選項的簡單方法:
font _ options = { ' family ':' monospace ',
重量':'粗體',
大小':' small'}
plt.rc
如果需要更深入的定制,參考全量選項,可以參考matplotlib的設(shè)置文件,位于matplotlib/mpl-data的路徑。如果您自定義此文件并將其放在主路徑中,然后將其作為。matplotlibrc,每次使用matplotlib都會被讀取。
關(guān)于作者:韋斯·麥金尼是流行的Python開源數(shù)據(jù)分析庫熊貓的創(chuàng)始人。他是Python數(shù)據(jù)社區(qū)和Apache軟件基金會中Python/C++的活躍演講者和開源開發(fā)者。他目前在紐約擔(dān)任軟件架構(gòu)師。
本文節(jié)選自出版商授權(quán)的《Python數(shù)據(jù)分析》。
用Python擴展讀取數(shù)據(jù)分析
點擊上圖學(xué)習(xí)購買
轉(zhuǎn)載請聯(lián)系微信:多哥丸子
推薦語言:Python數(shù)據(jù)分析經(jīng)典暢銷書新升級,首版中文版銷量10萬本。全面修訂更新Python 3.6,涵蓋熊貓、NumPy、IPython、Jupyter新版本。
問:你有什么制作圖表的技巧?
轉(zhuǎn)載/提交請聯(lián)系:baiyu@hzbook.com
1.《python數(shù)據(jù)可視化 純干貨:手把手教你用Python做數(shù)據(jù)可視化(附代碼)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《python數(shù)據(jù)可視化 純干貨:手把手教你用Python做數(shù)據(jù)可視化(附代碼)》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/junshi/1722862.html