
subplot函数怎么用?subplot(2,2,3)
- 科技
- 2023-08-14
- 5

大家好,关于subplot函数怎么用很多朋友都还不太明白,今天小编就来为大家分享关于subplot(2,2,3 的知识,希望对各位有所帮助!subplot在python...
大家好,关于subplot函数怎么用很多朋友都还不太明白,今天小编就来为大家分享关于subplot(2,2,3)的知识,希望对各位有所帮助!
subplot在python语言中代表什么
subplot(numRows,numCols,plotNum)其作用是把一个绘图区域分为多个子区域,并把需要绘制出来的图画在分好的指定区域内。
函数的意思是将整个绘图区域分为个子区域,按照从左到右,从上到下的顺序依次给子区域进行编号,并将需要绘制的图画在编好的第plotNum子区域中。如果numRows,numCols,plotNum这三个数都小于10的话,可以把它们缩写成一个三位证书。
如何高效地使用Matplotlib
引言
对新手来说Python可视化实在有些令人挫败。有很多不同的选项,如何选择正确的选项是一个挑战。例如,两年前这篇文章《OverviewofPythonVisualizationTools》(http://pbpython.com/visualization-tools-1.html)仍然吸引了大量读者。在那篇文章中,我否定了Matplotlib。但是,在使用过pandas、scikit-learn、seaborn和其他Python数据科学栈之后,我觉得之前否认Matplotlib的行为有点不成熟。坦白讲,当时我不是很了解Matplotlib,也不懂如何在我的工作流中高效使用Matplotlib。
现在我学习了一些工具,了解了如何用Matplotlib使用这些工具,Matplotlib逐渐变成了必需工具。本文将展示如何使用Matplotlib。我坚定地认为Matplotlib是Python数据科学栈必不可少的一部分,希望这篇文章可以帮助大家了解如何使用Matplotlib进行Python可视化。
为什么大家都在否定Matplotlib?
我认为,Matplotlib对于新手来说比较难存在几个原因。首先,Matplotlib有两个界面。第一个界面基于MATLAB,使用基于状态的接口。第二个界面是面向对象的接口。本文就不展开介绍Matplotlib有两个界面的原因,但了解这两种方法在使用Matplotlib绘图时会很重要。两个界面会引起混淆的原因是堆栈溢出和通过谷歌搜索获取的大量信息,新用户将发现问题的多个解决方案,但是这些问题看起来类似却不完全相同。从我的个人经验来讲,从以前的代码中,我可以看出有一些Matplotlib代码的混杂,我对此感觉很疑惑(尽管写它们的人是我……):-)
关键点
Matplotlib新手应该学习和使用面向对象的接口。
使用Matplotlib的另一个历史性挑战是一些默认的样式缺乏吸引力。在R使用ggplot就可以生成相当不错的图的世界中,Matplotlib相对来说有点丑。好消息是Matplotlib2.0中的样式好看了很多,你可以用最小的努力生成可视化。
第三个挑战是你不确定什么时候该使用Matplotlib,什么时候该使用基于Matplotlib构建的工具,如pandas或seaborn。大部分时候做一件事都有多种选择,但是对于新手来说选择正确的道路有些困难。这种混淆加上两种不同API的混淆简直就是挫败本败了……
为什么使用Matplotlib?
尽管Matplotlib有这么多问题,我还是喜欢用它,因为它很强大。这个库允许你创建几乎所有可视化。此外,围绕Matplotlib有一个丰富的Python工具生态环境,很多更高级的可视化工具使用Matplotlib作为基础库。如果你想在Python数据科学栈中进行任何操作,你需要对如何使用Matplotlib有一些基础了解。这就是本文其余部分的重点——提供一种高效使用Matplotlib的基础方法。
前提
推荐以下步骤学习如何使用Matplotlib:
1.学习Matplotlib的基本术语,具体来说就是什么是Figure和Axes。
2.一直使用面向对象的界面,养成习惯。
3.用基础的pandas绘图开始可视化。
4.使用seaborn进行稍微复杂的数据可视化。
5.使用Matplotlib自定义pandas或seaborn可视化。
下图非常重要,有助于理解图的不同术语。
大部分术语很直接易懂,需要牢记的是Figure是可能包含一或多个axes的最终图像。Axes代表单个图。一旦你理解这些是什么以及如何通过面向对象的API评估它们,其余步骤就很简单了。
了解这个知识还有一个好处,就是当你在网络上看东西的时候有一个出发点。如果你花时间了解了这个点,那么其他的MatplotlibAPI才有意义。此外,很多高级Python包,如seaborn和ggplot依赖于Matplotlib构建,因此理解了基础,学习更强大的框架才更加容易。
最后,我不是说你应该逃避其他优秀选项,如ggplot(又名ggpy)、bokeh、plotly或altair。我只是认为你需要对matplotlib+pandas+seaborn有一个基础的了解。了解基础可视化栈之后,你就可以探索其他优秀工具,根据需求做出合适的选择。
开始
下面主要介绍如何在pandas中创建基础的可视化以及使用Matplotlib定制最常用的项。了解基础流程有助于更直观地进行自定义。
我主要关注最常见的绘图任务,如标注轴、调整图形界限(limit)、更新图标题、保存图像和调整图例。
开始,我打算设置输入,读取一些数据:
importpandasaspd
importmatplotlib.pyplotasplt
frommatplotlib.tickerimportFuncFormatter
df=pd.read_excel("https://github.com/chris1610/pbpython/blob/master/data/sample-salesv3.xlsx?raw=true")
df.head()
数据包括2014年的销售交易额。为简短起见,我将总结这些数据,列出前十名客户的采购次数和交易额。绘图时我将对各列进行重命名。
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)
下图是数据。
现在数据在简单的表格形式呈现,我们再来看一下如何将数据绘制成条形图。如前所述,Matplotlib具备多种不同风格,可用于渲染图表。你可以使用plt.style.available查看你的系统可用的风格。
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']
使用如下简单风格:
plt.style.use('ggplot')
我鼓励大家使用不同的风格,找到自己喜欢的。
现在我们有了好看的风格,第一步就是使用标准pandas绘图函数绘制数据:
top_10.plot(kind='barh',y="Sales",x="Name")
推荐使用pandas绘图的原因在于它是一种快速便捷地建立可视化原型的方式。
自定义图表
如果你对该图表的重要部分都很满意,那么下一步就是对它执行自定义。一些自定义(如添加标题和标签)可以使用pandasplot函数轻松搞定。但是,你可能会发现自己需要在某个时刻跳出来。这就是我推荐你养成以下习惯的原因:
fig,ax=plt.subplots()
top_10.plot(kind='barh',y="Sales",x="Name",ax=ax)
生成的图表和原始图表基本一样,不过我们向plt.subplots()添加了一个额外的调用,并将ax传输至绘图函数。为什么要这么做呢?还记得我说在Matplotlib中获取轴和图像非常关键吗?这里所做的就是为了达到该目的。通过ax或fig对象可以执行任何自定义。
我们利用pandas实现快速绘图,现在利用Matplotlib获取所有功能。通过使用命名惯例,调整别人的解决方案适应自己的需求变得更加直接简单了。
假设我们想调整x极限,改变一些轴标签。现在我们在ax变量中有多个轴,可以进行一些操作:
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');
这是另一种改变标题和标签的简单方式:
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')
为了进一步展示该方法,我们还可以调整图像大小。使用plt.subplots()函数可以定义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)
要想修改这个图像,你可能需要执行很多操作。图中最碍眼的可能是总收益额的格式。Matplotlib可以使用FuncFormatter解决这一问题。该函数用途多样,允许用户定义的函数应用到值,并返回格式美观的字符串。
以下是货币格式化函数,用于处理数十万美元区间的数值:
defcurrency(x,pos):
'Thetwoargsarethevalueandtickposition'
ifx>=1000000:
return'${:1.1f}M'.format(x*1e-6)
return'${:1.0f}K'.format(x*1e-3)
现在我们有了格式化程序函数,就需要定义它,并将其应用到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个新客户的标签。以下是完整代码:
#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)
这可能不是最壮观的图,但它确实展示了使用该方法的力量。
图表
目前,我们所做的所有改变都是针对单个图表。我们还能够在图像上添加多个表,使用不同的选项保存整个图像。
如果我们确定要在同一个图像上放置两个表,那么我们应该对如何做有一个基础了解。首先,创建图像,然后创建轴,再将它们绘制成图表。使用plt.subplots()可以完成该操作:
fig,(ax0,ax1)=plt.subplots(nrows=1,ncols=2,sharey=True,figsize=(7,4))
在这个例子中,我使用nrows和ncols指定大小,这对新用户来说比较清晰易懂。
在示例代码中,你会经常看到变量如1、2。我认为使用命名参数便于稍后查看代码时理解代码。
我还使用sharey=True以使y轴共享相同的标签。
该示例很灵活,因为不同的轴可以解压成ax0和ax1。现在我们有了这些轴,就可以像上述示例中那样绘图,然后把一个图放在ax0上,另一个图放在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)
现在,我已经在jupyternotebook中用%matplotlibinline展示了很多图像。但是,在很多情况下你需要以特定格式保存图像,将其和其他呈现方式整合在一起。
Matplotlib支持多种不同文件保存格式。你可以使用fig.canvas.get_supported_filetypes()查看系统支持的文件格式:
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对象,因此我们可以将图像保存成多种格式:
fig.savefig('sales.png',transparent=False,dpi=80,bbox_inches="tight")
该版本将图表保存为不透明背景的png文件。我还指定dpi和bbox_inches="tight"以最小化多余空白。
结论
希望该方法可以帮助大家理解如何更有效地使用Matplotlib进行日常数据分析。
subplot在matlab中怎么用imshow
1.区别在于plot是绘制单个图形,而subplot是绘制多个图形。2.plot函数是用于绘制单个图形,可以在一个坐标系中绘制多个曲线,但是只能绘制一个图形。而subplot函数则是用于绘制多个图形,可以在一个画布中绘制多个子图,每个子图可以有自己的坐标系和数据。因此,subplot函数可以更加灵活地组织多个图形。3.值得注意的是,subplot函数的参数是一个三元组,分别表示子图的行数、列数和当前子图的位置。在使用subplot函数时,需要注意参数的设置,否则可能会出现子图重叠或者排列不合理的情况。
matlab的响应图怎么看全
在MATLAB中,如果绘制的响应图比较大,可能会因过于密集而难以查看全部内容。以下是一些方法可以帮助您查看响应图全貌:
1.使用缩放工具:在响应图上单击鼠标右键,在下拉菜单中选择“ZoomIn”或“ZoomOut”命令进行放大或缩小视图。您也可以使用“放大镜”工具来更精确地缩放图像,并使其适合屏幕。
2.平移视图:在响应图上单击鼠标右键,在下拉菜单中选择“Pan”命令启用平移模式。然后,您可以使用鼠标拖动图像来查看不同部分。
3.更改坐标轴范围:通过更改坐标轴的最小值和最大值,可以调整绘图区域的大小。您可以使用“xlim”和“ylim”函数来设置X和Y轴的范围。例如,xlim([0,10])将X轴范围设置为从0到10。
4.绘制子图:如果图像非常大或复杂,您可以在一个窗口中绘制多个子图。您可以使用“subplot”函数来创建一个包含多个子图的图像,并使用子图编号来控制每个子图的位置和尺寸。
5.保存图像并查看:最后,您可以使用“saveas”函数将响应图保存为图片格式,然后在其他程序中打开和查看。这样可以帮助您更好地查看和分析响应图的全貌。
通过以上方法,您可以更好地查看MATLAB中的响应图,并了解其完整内容。
ml绘图怎么让线在中间
你好,在使用ML绘图时,让线在中间需要进行一些调整。首先,可以通过设置线条宽度来让线条居中显示。其次,可以使用绘图库中的坐标系来调整线条的位置。例如,在Matplotlib中,可以使用subplot函数来创建一个子图,并使用ax.spines来控制坐标轴线的位置。
还可以使用plt.xlim和plt.ylim来控制坐标轴的范围,从而使线条居中显示。
最后,可以使用plt.grid来添加网格线以帮助调整线条的位置。总之,让线在中间需要对绘图库的功能有一定的了解和熟练掌握。
plot和subplot的区别
1.区别在于plot是绘制单个图形,而subplot是绘制多个图形。2.plot函数是用于绘制单个图形,可以在一个坐标系中绘制多个曲线,但是只能绘制一个图形。而subplot函数则是用于绘制多个图形,可以在一个画布中绘制多个子图,每个子图可以有自己的坐标系和数据。因此,subplot函数可以更加灵活地组织多个图形。3.值得注意的是,subplot函数的参数是一个三元组,分别表示子图的行数、列数和当前子图的位置。在使用subplot函数时,需要注意参数的设置,否则可能会出现子图重叠或者排列不合理的情况。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!
本文链接:http://www.depponpd.com/ke/3443.html