
subplot函數(shù)怎么用?subplot(2,2,3)

大家好,關(guān)于subplot函數(shù)怎么用很多朋友都還不太明白,今天小編就來為大家分享關(guān)于subplot(2,2,3 的知識(shí),希望對(duì)各位有所幫助!subplot在python...
大家好,關(guān)于subplot函數(shù)怎么用很多朋友都還不太明白,今天小編就來為大家分享關(guān)于subplot(2,2,3)的知識(shí),希望對(duì)各位有所幫助!
subplot在python語言中代表什么
subplot(numRows,numCols,plotNum)其作用是把一個(gè)繪圖區(qū)域分為多個(gè)子區(qū)域,并把需要繪制出來的圖畫在分好的指定區(qū)域內(nèi)。
函數(shù)的意思是將整個(gè)繪圖區(qū)域分為個(gè)子區(qū)域,按照從左到右,從上到下的順序依次給子區(qū)域進(jìn)行編號(hào),并將需要繪制的圖畫在編好的第plotNum子區(qū)域中。如果numRows,numCols,plotNum這三個(gè)數(shù)都小于10的話,可以把它們縮寫成一個(gè)三位證書。
如何高效地使用Matplotlib
引言
對(duì)新手來說Python可視化實(shí)在有些令人挫敗。有很多不同的選項(xiàng),如何選擇正確的選項(xiàng)是一個(gè)挑戰(zhàn)。例如,兩年前這篇文章《OverviewofPythonVisualizationTools》(http://pbpython.com/visualization-tools-1.html)仍然吸引了大量讀者。在那篇文章中,我否定了Matplotlib。但是,在使用過pandas、scikit-learn、seaborn和其他Python數(shù)據(jù)科學(xué)棧之后,我覺得之前否認(rèn)Matplotlib的行為有點(diǎn)不成熟。坦白講,當(dāng)時(shí)我不是很了解Matplotlib,也不懂如何在我的工作流中高效使用Matplotlib。
現(xiàn)在我學(xué)習(xí)了一些工具,了解了如何用Matplotlib使用這些工具,Matplotlib逐漸變成了必需工具。本文將展示如何使用Matplotlib。我堅(jiān)定地認(rèn)為Matplotlib是Python數(shù)據(jù)科學(xué)棧必不可少的一部分,希望這篇文章可以幫助大家了解如何使用Matplotlib進(jìn)行Python可視化。
為什么大家都在否定Matplotlib?
我認(rèn)為,Matplotlib對(duì)于新手來說比較難存在幾個(gè)原因。首先,Matplotlib有兩個(gè)界面。第一個(gè)界面基于MATLAB,使用基于狀態(tài)的接口。第二個(gè)界面是面向?qū)ο蟮慕涌凇1疚木筒徽归_介紹Matplotlib有兩個(gè)界面的原因,但了解這兩種方法在使用Matplotlib繪圖時(shí)會(huì)很重要。兩個(gè)界面會(huì)引起混淆的原因是堆棧溢出和通過谷歌搜索獲取的大量信息,新用戶將發(fā)現(xiàn)問題的多個(gè)解決方案,但是這些問題看起來類似卻不完全相同。從我的個(gè)人經(jīng)驗(yàn)來講,從以前的代碼中,我可以看出有一些Matplotlib代碼的混雜,我對(duì)此感覺很疑惑(盡管寫它們的人是我……):-)
關(guān)鍵點(diǎn)
Matplotlib新手應(yīng)該學(xué)習(xí)和使用面向?qū)ο蟮慕涌凇?/p>
使用Matplotlib的另一個(gè)歷史性挑戰(zhàn)是一些默認(rèn)的樣式缺乏吸引力。在R使用ggplot就可以生成相當(dāng)不錯(cuò)的圖的世界中,Matplotlib相對(duì)來說有點(diǎn)丑。好消息是Matplotlib2.0中的樣式好看了很多,你可以用最小的努力生成可視化。
第三個(gè)挑戰(zhàn)是你不確定什么時(shí)候該使用Matplotlib,什么時(shí)候該使用基于Matplotlib構(gòu)建的工具,如pandas或seaborn。大部分時(shí)候做一件事都有多種選擇,但是對(duì)于新手來說選擇正確的道路有些困難。這種混淆加上兩種不同API的混淆簡直就是挫敗本敗了……
為什么使用Matplotlib?
盡管Matplotlib有這么多問題,我還是喜歡用它,因?yàn)樗軓?qiáng)大。這個(gè)庫允許你創(chuàng)建幾乎所有可視化。此外,圍繞Matplotlib有一個(gè)豐富的Python工具生態(tài)環(huán)境,很多更高級(jí)的可視化工具使用Matplotlib作為基礎(chǔ)庫。如果你想在Python數(shù)據(jù)科學(xué)棧中進(jìn)行任何操作,你需要對(duì)如何使用Matplotlib有一些基礎(chǔ)了解。這就是本文其余部分的重點(diǎn)——提供一種高效使用Matplotlib的基礎(chǔ)方法。
前提
推薦以下步驟學(xué)習(xí)如何使用Matplotlib:
1.學(xué)習(xí)Matplotlib的基本術(shù)語,具體來說就是什么是Figure和Axes。
2.一直使用面向?qū)ο蟮慕缑妫B(yǎng)成習(xí)慣。
3.用基礎(chǔ)的pandas繪圖開始可視化。
4.使用seaborn進(jìn)行稍微復(fù)雜的數(shù)據(jù)可視化。
5.使用Matplotlib自定義pandas或seaborn可視化。
下圖非常重要,有助于理解圖的不同術(shù)語。
大部分術(shù)語很直接易懂,需要牢記的是Figure是可能包含一或多個(gè)axes的最終圖像。Axes代表單個(gè)圖。一旦你理解這些是什么以及如何通過面向?qū)ο蟮腁PI評(píng)估它們,其余步驟就很簡單了。
了解這個(gè)知識(shí)還有一個(gè)好處,就是當(dāng)你在網(wǎng)絡(luò)上看東西的時(shí)候有一個(gè)出發(fā)點(diǎn)。如果你花時(shí)間了解了這個(gè)點(diǎn),那么其他的MatplotlibAPI才有意義。此外,很多高級(jí)Python包,如seaborn和ggplot依賴于Matplotlib構(gòu)建,因此理解了基礎(chǔ),學(xué)習(xí)更強(qiáng)大的框架才更加容易。
最后,我不是說你應(yīng)該逃避其他優(yōu)秀選項(xiàng),如ggplot(又名ggpy)、bokeh、plotly或altair。我只是認(rèn)為你需要對(duì)matplotlib+pandas+seaborn有一個(gè)基礎(chǔ)的了解。了解基礎(chǔ)可視化棧之后,你就可以探索其他優(yōu)秀工具,根據(jù)需求做出合適的選擇。
開始
下面主要介紹如何在pandas中創(chuàng)建基礎(chǔ)的可視化以及使用Matplotlib定制最常用的項(xiàng)。了解基礎(chǔ)流程有助于更直觀地進(jìn)行自定義。
我主要關(guān)注最常見的繪圖任務(wù),如標(biāo)注軸、調(diào)整圖形界限(limit)、更新圖標(biāo)題、保存圖像和調(diào)整圖例。
開始,我打算設(shè)置輸入,讀取一些數(shù)據(jù):
importpandasaspd
importmatplotlib.pyplotasplt
frommatplotlib.tickerimportFuncFormatter
df=pd.read_excel("https://github.com/chris1610/pbpython/blob/master/data/sample-salesv3.xlsx?raw=true")
df.head()
數(shù)據(jù)包括2014年的銷售交易額。為簡短起見,我將總結(jié)這些數(shù)據(jù),列出前十名客戶的采購次數(shù)和交易額。繪圖時(shí)我將對(duì)各列進(jìn)行重命名。
top_10=(df.groupby('name')['extprice','quantity'].agg({'extprice':'sum','quantity':'count'})
.sort_values(by='extprice',ascending=False))[:10].reset_index()
top_10.rename(columns={'name':'Name','extprice':'Sales','quantity':'Purchases'},inplace=True)
下圖是數(shù)據(jù)。
現(xiàn)在數(shù)據(jù)在簡單的表格形式呈現(xiàn),我們?cè)賮砜匆幌氯绾螌?shù)據(jù)繪制成條形圖。如前所述,Matplotlib具備多種不同風(fēng)格,可用于渲染圖表。你可以使用plt.style.available查看你的系統(tǒng)可用的風(fēng)格。
plt.style.available
['seaborn-dark',
'seaborn-dark-palette',
'fivethirtyeight',
'seaborn-whitegrid',
'seaborn-darkgrid',
'seaborn',
'bmh',
'classic',
'seaborn-colorblind',
'seaborn-muted',
'seaborn-white',
'seaborn-talk',
'grayscale',
'dark_background',
'seaborn-deep',
'seaborn-bright',
'ggplot',
'seaborn-paper',
'seaborn-notebook',
'seaborn-poster',
'seaborn-ticks',
'seaborn-pastel']
使用如下簡單風(fēng)格:
plt.style.use('ggplot')
我鼓勵(lì)大家使用不同的風(fēng)格,找到自己喜歡的。
現(xiàn)在我們有了好看的風(fēng)格,第一步就是使用標(biāo)準(zhǔn)pandas繪圖函數(shù)繪制數(shù)據(jù):
top_10.plot(kind='barh',y="Sales",x="Name")
推薦使用pandas繪圖的原因在于它是一種快速便捷地建立可視化原型的方式。
自定義圖表
如果你對(duì)該圖表的重要部分都很滿意,那么下一步就是對(duì)它執(zhí)行自定義。一些自定義(如添加標(biāo)題和標(biāo)簽)可以使用pandasplot函數(shù)輕松搞定。但是,你可能會(huì)發(fā)現(xiàn)自己需要在某個(gè)時(shí)刻跳出來。這就是我推薦你養(yǎng)成以下習(xí)慣的原因:
fig,ax=plt.subplots()
top_10.plot(kind='barh',y="Sales",x="Name",ax=ax)
生成的圖表和原始圖表基本一樣,不過我們向plt.subplots()添加了一個(gè)額外的調(diào)用,并將ax傳輸至繪圖函數(shù)。為什么要這么做呢?還記得我說在Matplotlib中獲取軸和圖像非常關(guān)鍵嗎?這里所做的就是為了達(dá)到該目的。通過ax或fig對(duì)象可以執(zhí)行任何自定義。
我們利用pandas實(shí)現(xiàn)快速繪圖,現(xiàn)在利用Matplotlib獲取所有功能。通過使用命名慣例,調(diào)整別人的解決方案適應(yīng)自己的需求變得更加直接簡單了。
假設(shè)我們想調(diào)整x極限,改變一些軸標(biāo)簽。現(xiàn)在我們?cè)赼x變量中有多個(gè)軸,可以進(jìn)行一些操作:
fig,ax=plt.subplots()
top_10.plot(kind='barh',y="Sales",x="Name",ax=ax)
ax.set_xlim([-10000,140000])
ax.set_xlabel('TotalRevenue')
ax.set_ylabel('Customer');
這是另一種改變標(biāo)題和標(biāo)簽的簡單方式:
fig,ax=plt.subplots()
top_10.plot(kind='barh',y="Sales",x="Name",ax=ax)
ax.set_xlim([-10000,140000])
ax.set(title='2014Revenue',xlabel='TotalRevenue',ylabel='Customer')
為了進(jìn)一步展示該方法,我們還可以調(diào)整圖像大小。使用plt.subplots()函數(shù)可以定義figsize,以英寸為單位。我們還可以使用ax.legend().set_visible(False)移除圖例。
fig,ax=plt.subplots(figsize=(5,6))
top_10.plot(kind='barh',y="Sales",x="Name",ax=ax)
ax.set_xlim([-10000,140000])
ax.set(title='2014Revenue',xlabel='TotalRevenue')
ax.legend().set_visible(False)
要想修改這個(gè)圖像,你可能需要執(zhí)行很多操作。圖中最礙眼的可能是總收益額的格式。Matplotlib可以使用FuncFormatter解決這一問題。該函數(shù)用途多樣,允許用戶定義的函數(shù)應(yīng)用到值,并返回格式美觀的字符串。
以下是貨幣格式化函數(shù),用于處理數(shù)十萬美元區(qū)間的數(shù)值:
defcurrency(x,pos):
'Thetwoargsarethevalueandtickposition'
ifx>=1000000:
return'${:1.1f}M'.format(x*1e-6)
return'${:1.0f}K'.format(x*1e-3)
現(xiàn)在我們有了格式化程序函數(shù),就需要定義它,并將其應(yīng)用到x軸。完整代碼如下:
fig,ax=plt.subplots()
top_10.plot(kind='barh',y="Sales",x="Name",ax=ax)
ax.set_xlim([-10000,140000])
ax.set(title='2014Revenue',xlabel='TotalRevenue',ylabel='Customer')
formatter=FuncFormatter(currency)
ax.xaxis.set_major_formatter(formatter)
ax.legend().set_visible(False)
這張圖美觀多了,非常好地展示了自定義問題解決方案的靈活性。最后要說的自定義特征是向圖表添加注釋。你可以使用ax.axvline()畫垂直線,使用ax.text()添加自定義文本。就以上示例,我們可以畫一條表示平均值的線,包括代表3個(gè)新客戶的標(biāo)簽。以下是完整代碼:
#Createthefigureandtheaxes
fig,ax=plt.subplots()
#Plotthedataandgettheaveraged
top_10.plot(kind='barh',y="Sales",x="Name",ax=ax)
avg=top_10['Sales'].mean()
#Setlimitsandlabels
ax.set_xlim([-10000,140000])
ax.set(title='2014Revenue',xlabel='TotalRevenue',ylabel='Customer')
#Addalinefortheaverage
ax.axvline(x=avg,color='b',label='Average',linestyle='--',linewidth=1)
#Annotatethenewcustomers
forcustin[3,5,8]:
ax.text(115000,cust,"NewCustomer")
#Formatthecurrency
formatter=FuncFormatter(currency)
ax.xaxis.set_major_formatter(formatter)
#Hidethelegend
ax.legend().set_visible(False)
這可能不是最壯觀的圖,但它確實(shí)展示了使用該方法的力量。
圖表
目前,我們所做的所有改變都是針對(duì)單個(gè)圖表。我們還能夠在圖像上添加多個(gè)表,使用不同的選項(xiàng)保存整個(gè)圖像。
如果我們確定要在同一個(gè)圖像上放置兩個(gè)表,那么我們應(yīng)該對(duì)如何做有一個(gè)基礎(chǔ)了解。首先,創(chuàng)建圖像,然后創(chuàng)建軸,再將它們繪制成圖表。使用plt.subplots()可以完成該操作:
fig,(ax0,ax1)=plt.subplots(nrows=1,ncols=2,sharey=True,figsize=(7,4))
在這個(gè)例子中,我使用nrows和ncols指定大小,這對(duì)新用戶來說比較清晰易懂。
在示例代碼中,你會(huì)經(jīng)常看到變量如1、2。我認(rèn)為使用命名參數(shù)便于稍后查看代碼時(shí)理解代碼。
我還使用sharey=True以使y軸共享相同的標(biāo)簽。
該示例很靈活,因?yàn)椴煌妮S可以解壓成ax0和ax1。現(xiàn)在我們有了這些軸,就可以像上述示例中那樣繪圖,然后把一個(gè)圖放在ax0上,另一個(gè)圖放在ax1。
#Getthefigureandtheaxes
fig,(ax0,ax1)=plt.subplots(nrows=1,ncols=2,sharey=True,figsize=(7,4))
top_10.plot(kind='barh',y="Sales",x="Name",ax=ax0)
ax0.set_xlim([-10000,140000])
ax0.set(title='Revenue',xlabel='TotalRevenue',ylabel='Customers')
#Plottheaverageasaverticalline
avg=top_10['Sales'].mean()
ax0.axvline(x=avg,color='b',label='Average',linestyle='--',linewidth=1)
#Repeatfortheunitplot
top_10.plot(kind='barh',y="Purchases",x="Name",ax=ax1)
avg=top_10['Purchases'].mean()
ax1.set(title='Units',xlabel='TotalUnits',ylabel='')
ax1.axvline(x=avg,color='b',label='Average',linestyle='--',linewidth=1)
#Titlethefigure
fig.suptitle('2014SalesAnalysis',fontsize=14,fontweight='bold');
#Hidethelegends
ax1.legend().set_visible(False)
ax0.legend().set_visible(False)
現(xiàn)在,我已經(jīng)在jupyternotebook中用%matplotlibinline展示了很多圖像。但是,在很多情況下你需要以特定格式保存圖像,將其和其他呈現(xiàn)方式整合在一起。
Matplotlib支持多種不同文件保存格式。你可以使用fig.canvas.get_supported_filetypes()查看系統(tǒng)支持的文件格式:
fig.canvas.get_supported_filetypes()
{'eps':'EncapsulatedPostscript',
'jpeg':'JointPhotographicExpertsGroup',
'jpg':'JointPhotographicExpertsGroup',
'pdf':'PortableDocumentFormat',
'pgf':'PGFcodeforLaTeX',
'png':'PortableNetworkGraphics',
'ps':'Postscript',
'raw':'RawRGBAbitmap',
'rgba':'RawRGBAbitmap',
'svg':'ScalableVectorGraphics',
'svgz':'ScalableVectorGraphics',
'tif':'TaggedImageFileFormat',
'tiff':'TaggedImageFileFormat'}
我們有fig對(duì)象,因此我們可以將圖像保存成多種格式:
fig.savefig('sales.png',transparent=False,dpi=80,bbox_inches="tight")
該版本將圖表保存為不透明背景的png文件。我還指定dpi和bbox_inches="tight"以最小化多余空白。
結(jié)論
希望該方法可以幫助大家理解如何更有效地使用Matplotlib進(jìn)行日常數(shù)據(jù)分析。
subplot在matlab中怎么用imshow
1.區(qū)別在于plot是繪制單個(gè)圖形,而subplot是繪制多個(gè)圖形。2.plot函數(shù)是用于繪制單個(gè)圖形,可以在一個(gè)坐標(biāo)系中繪制多個(gè)曲線,但是只能繪制一個(gè)圖形。而subplot函數(shù)則是用于繪制多個(gè)圖形,可以在一個(gè)畫布中繪制多個(gè)子圖,每個(gè)子圖可以有自己的坐標(biāo)系和數(shù)據(jù)。因此,subplot函數(shù)可以更加靈活地組織多個(gè)圖形。3.值得注意的是,subplot函數(shù)的參數(shù)是一個(gè)三元組,分別表示子圖的行數(shù)、列數(shù)和當(dāng)前子圖的位置。在使用subplot函數(shù)時(shí),需要注意參數(shù)的設(shè)置,否則可能會(huì)出現(xiàn)子圖重疊或者排列不合理的情況。
matlab的響應(yīng)圖怎么看全
在MATLAB中,如果繪制的響應(yīng)圖比較大,可能會(huì)因過于密集而難以查看全部內(nèi)容。以下是一些方法可以幫助您查看響應(yīng)圖全貌:
1.使用縮放工具:在響應(yīng)圖上單擊鼠標(biāo)右鍵,在下拉菜單中選擇“ZoomIn”或“ZoomOut”命令進(jìn)行放大或縮小視圖。您也可以使用“放大鏡”工具來更精確地縮放圖像,并使其適合屏幕。
2.平移視圖:在響應(yīng)圖上單擊鼠標(biāo)右鍵,在下拉菜單中選擇“Pan”命令啟用平移模式。然后,您可以使用鼠標(biāo)拖動(dòng)圖像來查看不同部分。
3.更改坐標(biāo)軸范圍:通過更改坐標(biāo)軸的最小值和最大值,可以調(diào)整繪圖區(qū)域的大小。您可以使用“xlim”和“ylim”函數(shù)來設(shè)置X和Y軸的范圍。例如,xlim([0,10])將X軸范圍設(shè)置為從0到10。
4.繪制子圖:如果圖像非常大或復(fù)雜,您可以在一個(gè)窗口中繪制多個(gè)子圖。您可以使用“subplot”函數(shù)來創(chuàng)建一個(gè)包含多個(gè)子圖的圖像,并使用子圖編號(hào)來控制每個(gè)子圖的位置和尺寸。
5.保存圖像并查看:最后,您可以使用“saveas”函數(shù)將響應(yīng)圖保存為圖片格式,然后在其他程序中打開和查看。這樣可以幫助您更好地查看和分析響應(yīng)圖的全貌。
通過以上方法,您可以更好地查看MATLAB中的響應(yīng)圖,并了解其完整內(nèi)容。
ml繪圖怎么讓線在中間
你好,在使用ML繪圖時(shí),讓線在中間需要進(jìn)行一些調(diào)整。首先,可以通過設(shè)置線條寬度來讓線條居中顯示。其次,可以使用繪圖庫中的坐標(biāo)系來調(diào)整線條的位置。例如,在Matplotlib中,可以使用subplot函數(shù)來創(chuàng)建一個(gè)子圖,并使用ax.spines來控制坐標(biāo)軸線的位置。
還可以使用plt.xlim和plt.ylim來控制坐標(biāo)軸的范圍,從而使線條居中顯示。
最后,可以使用plt.grid來添加網(wǎng)格線以幫助調(diào)整線條的位置。總之,讓線在中間需要對(duì)繪圖庫的功能有一定的了解和熟練掌握。
plot和subplot的區(qū)別
1.區(qū)別在于plot是繪制單個(gè)圖形,而subplot是繪制多個(gè)圖形。2.plot函數(shù)是用于繪制單個(gè)圖形,可以在一個(gè)坐標(biāo)系中繪制多個(gè)曲線,但是只能繪制一個(gè)圖形。而subplot函數(shù)則是用于繪制多個(gè)圖形,可以在一個(gè)畫布中繪制多個(gè)子圖,每個(gè)子圖可以有自己的坐標(biāo)系和數(shù)據(jù)。因此,subplot函數(shù)可以更加靈活地組織多個(gè)圖形。3.值得注意的是,subplot函數(shù)的參數(shù)是一個(gè)三元組,分別表示子圖的行數(shù)、列數(shù)和當(dāng)前子圖的位置。在使用subplot函數(shù)時(shí),需要注意參數(shù)的設(shè)置,否則可能會(huì)出現(xiàn)子圖重疊或者排列不合理的情況。
好了,本文到此結(jié)束,如果可以幫助到大家,還望關(guān)注本站哦!
本文鏈接:http://www.wzyaohuidianqi.cn/ke/3443.html
