www.ydisp.cn/oss/202207/13/7731896960a3379b86a8276f93e5d6023c93dc.jpg"style="width:600px;能见度:可见;height:335px;"data-type="inline">图表层级中最重要的元素FiguregraphicsFigure是图形本身。调用figure方法创建时,可以指定其长宽(figsize)和分辨率(dpi),还可以指定背景色(facecolor)和标题(suptitle)。另外,保存图形时,不会使用背景色,因为savefig函数还有一个faceccolor参数(默认为白色),会overrideyourfigurebackgroundcolor.如果你不想要任何背景,你可以将图形保存在当指定transparent=True.Axesaxis这是第二个最重要的元素,它对应于数据图表将被渲染的实际区域.也叫subplot,每个figure可以有一个或多个axes轴,每个axes轴通常有四个边(left,top,right,bottom)包围,称为spines,每个spine可以用major和minorticks装饰(可以指向内部或外部),刻度标签和标签。默认情况下,matplotlib仅装饰左边框和底边框。Axis轴的缩放脊柱称为轴。水平的是x轴,垂直的是y轴。每个轴由spines轴、mainScale、minorscale、majorscalelabel、minorscalelabel和axislabel组成。Spines轴Spines是连接轴刻度线和数据区边界的轴。它们可以放置在任意位置,您可以选择显示或隐藏它们。第一步:设置画布大小和调整轴范围第二步:设置图表边框格式第三步:设置图表标题第四步:设置图表的网格Step5:设置坐标轴比例Step6:绘图Step7配置图例Step1设置画布第一步是设置画布的大小,调整坐标轴的范围。首先,你需要一块画布,可以在上面创作,就像写字一样。你需要先拿一张纸。画布的大小(宽高比、分辨率)和缩放范围可以先设置。如果事先不知道比例范围,可以在绘制完成后进行适当的调整。setcanvasfig=plt.figure(figsize=(8,8))ax=fig.add_subplot(1,1,1,aspect=1)ax.set_xlim(0,4)ax.set_ylim(0,4)Matplotlib有两个绘图界面:①是方便的MATLAB风格界面,②是功能更强大的面向对象界面。MATLAB风格的界面MATLAB风格的工具驻留在pyplot(plt)界面中。plt.xx之类的是功能图,通过将数据参数传入plt类的静态方法,调用方法绘制。这个界面最重要的特点是它是有状态的:它跟踪所有plt命令适用的“当前”图形和轴。可以使用plt.gcf()(获取当前图形)和plt.gca()(获取当前坐标轴)查看具体信息。面向对象接口fig,ax=plt.subplots()是基于对象的编程,其中plt.subplots()返回一个元组,包括figure对象(控制图形整体大小)和axes对象(控制绘图、坐标,ETC。)。另外,fig.add_subplot()也是一样的。进行基于对象的绘图,第一步是通过plt.subplots()实例化figure类和axes类,即代码中的fig和ax,然后通过fig调整整体图片大小,通过ax绘制图形,设置坐标,函数式绘图最大的优点就是直观。面向对象的界面可以适应更复杂的场景,让您更好地控制自己的图形。在面向对象的接口中,绘图函数不再受当前“活动”图形或轴的约束,而是成为显式的Figure和Axes方法。Step2设置坐标轴第二步是设置图表Spines的坐标轴。设置轴。隐藏轴图的轴可以通过轴属性ax.spines设置。最常见的设置方法是选择隐藏,通过属性['top','bottom','left','right']轴分别设置上、下、左、右。ax.spines.right.set_visible(False)ax.spines.bottom.set_visible(False)还有一个经常用到的情况,根据绘图的需要,调整spines轴在图中的位置。例如绘制正弦和余弦函数时:movetheaxis#将左边和底部的spines移动到(0,0)位置ax.spines["left"].set_position(("data",0))ax.spines["left"].set_position(("data",0))ax.刺[“底部”]。set_position(("data",0))#隐藏顶部和右侧spines.ax.spines["top"].set_visible(False)ax.spines["right"].set_visible(False)Step3设置标题第三步,设置标题就是用几个简短的词来高度概括图文要传达的信息。设置标题通过ax.set_title函数设置标题。ax.set_title("Anatomyofafigure(hierarchy)",fontsize=20,verticalalignment="bottom")matplotlib.axes.Axes.set_title()matplotlib.axes.Axes.set_title()ax.set_title()是为可以设置ax子图的标题。当有多个子图时,可以通过ax设置不同的标题。如果需要设置总标题,可以通过fig.suptitle('Totaltitle')方法设置。Axes.set_title(label,fontdict=None,loc='center',pad=None,**kwargs)参数:label:该参数是用于标题的文本。fontdict:这个参数是一个字典,控制标题文字的外观。loc:该参数用于设置标题的位置{'center','left','right'}。pad:此参数是标题距轴顶部的偏移量,以磅为单位。Step4设置网格第四步是设置图表的网格。图表的网格是一种图形配置。网格可以帮助读者更好、更直观地量化图形。设置网格通过ax.grid()方法添加网格线。ax.grid(linestyle="--",linewidth=0.5,color=".25",zorder=-10)matplotlib.axes.Axes.grid()Axes.grid(b=None,which='major',axis='both',**kwargs)参数:b:是否显示网格线。布尔值或无,可选参数。如果没有关键字参数,则b为真,如果b为None且没有关键字参数,则等效于切换网格线的可见性。which:网格线显示的比例。字符串,可选参数,取值范围为{'major','minor','both'},默认为'major'。'major'是大调音阶,'minor'是小调音阶。未输入的方向将不会显示网格比例。axis:选择显示网格线的轴。String,可选参数,取值范围为{'both','x','y'},默认为'both'。**kwargs:Line2D线对象属性。常用颜色:不用多说,就是设置网格线的颜色。或者你可以直接使用c而不是颜色。linestyle:你也可以使用ls代替linestyle来设置网格线的样式,可以是连续的实线、虚线或其他不同的线。|'-'|'--'|'-'|':'|'无'|''|''|linewidth:设置网格线的宽度网格线方法:plt.grid(true)#设置网格线格式:plt.grid(color='r',linestyle='--',linewidth=1,alpha=0.3)#使用axes类面向对象命令#同时设置水平轴和垂直轴上的网格线ax.grid(color='r',linestyle='--',linewidth=1,alpha=0.3)#单独设置X坐标轴(垂直方向)上的网格Lineax.xaxis.grid(color='r',linestyle='--',linewidth=1,alpha=0.3)#单独设置网格Y轴上的线(水平方向)ax.yaxis.grid(color='r',linestyle='--',linewidth=1,alpha=0.3)图形配置中手动设置背景色的几种方法①设置图背景色#方法一:plt.figure(facecolor='blue',#图表区背景色edgecolor='black')#图表区边框线颜色#方法二:fig=plt.gcf()fig.set_facecolor('green')②设置坐标轴的背景色#方法一:a=plt.axes([.65,.6,.2,.2],facecolor='k')#pyplotapi命令-黑色背景#方法二:ax1=plt.gca()ax1.patch.set_facecolor("gray")#设置ax1区域背景色ax1.patch.set_alpha(0.5)#设置ax1区域背景色透明度③修改matplotlib的默认参数Matplotlib每次加载都会定义一个运行时配置(rcParams),其中包含您创建的所有图形元素的沉默您可以随时使用mpl.rcParams便捷方法更改此配置以定义样式。mpl.rcParams['axes.facecolor']='red'mpl.rcParams['savefig.facecolor']='red'manualconfigurationmanualconfiguration#withgraybackgroundfig=plt.figure(figsize=(8,8),facecolor='#E6E6E6',#图表区背景色edgecolor='black')#绘制白色网格线ax.grid(color='grey',linestyle='-.')#隐藏轴的线条forspineinax.spines.values():spine.set_visible(False)#隐藏上右刻度ax.xaxis.tick_bottom()ax.yaxis.tick_left()#削弱刻度和标签ax.tick_params(colors='gray',direction='out')fortickinax.get_xticklabels():tick.set_color('gray')fortickinax.get_yticklabels():tick.set_color('gray')使用默认配置样式表即使您不打算创建自己的绘图样式,样式表中包含的默认内容也非常有用。可以通过plt.style.available命令查看所有可用样式,plt.style.available[:5]['fivethirtyeight','seaborn-pastel','seaborn-whitegrid','ggplot','grayscale']使用某样式表的基本方法如下:plt.style.use('ggplot')默认配置Step5设置坐标轴刻度坐标轴定位器和格式生成器虽然Matplotlib默认坐标轴定位器(定位器)和格式生成器一个格式化器就可以满足大多数需要,但它并不适合所有图片。TickLocatorTickLocator主要是设置刻度位置,在我的绘图教程中主要是用来设置次要刻度,而Formatter主要是用来设置刻度形式。Matplotlib对这两者有多种用法,其中Locator的子类主要有:刻度标签格式如下。Tickformatters部分代码如下importmatplotlib.tickerasticker#MultipleLocatoraxs[1].xaxis.set_major_locator(ticker.MultipleLocator(0.5))axs[1].xaxis.set_minor_locator(ticker.MultipleLocator(0.1))#IndexLocatoraxs[4.plot(range(0,5),[0]*5,color='white')axs[4].xaxis.set_major_locator(ticker.IndexLocator(base=0.5,offset=0.25))#AutoLocatoraxs[5].xaxis.set_major_locator(ticker.AutoLocator())axs[5].xaxis.set_minor_locator(ticker.AutoMinorLocator())#LogLocatoraxs[7].set_xlim(10**3,10**10)axs[7].set_xscale('log')axs[7].xaxis.set_major_locator(ticker.LogLocator(base=10,numticks=15))#StrMethodformattersetup(axs1[1],title="StrMethodFormatter('{x:.3f}')")axs1[1].xaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.3f}"))#FuncFormatter可以用作装饰器@ticker.FuncFormatterdefmajor_formatter(x,pos):returnf'[{x:.2f}]'setup(axs1[2],title='FuncFormatter("[{:.2f}]".format')axs1[2].xaxis.set_major_formatter(major_formatter)刻度标签参数更改刻度,刻度标签和网格线的外观},选择对哪个轴进行操作,默认为'both'reset:bool,如果为True,则在处理其他参数之前将所有参数设置为默认值。它的默认值为False。which:optional{'major','minor','both'}选择在长轴或短轴上操作direction/tickdir:optional{'in','out','inout'}刻度线大小的方向/length:float,刻度线的长度width:float,刻度线的宽度labelsize:float/str,刻度值的字体大小labelcolor:刻度值的颜色colors:设置颜色同时显示刻度线和刻度值zorder:float,勾选并标注zorder.bottom,top,left,right:bool,分别是上、下、左、右是否显示刻度线,True表示显示labelbottom、labeltop、labelleft、labelright:bool,分别表示是否在上、下、左、右显示刻度值,True表示显示labelrotation:刻度值逆时针旋转给定度数,如20gridOn:bool,是否添加网格线;grid_alpha:浮动网格线透明度;grid_color:网格线颜色;grid_linewidth:浮动网格线宽;grid_linestyle:网格线类型tick1On,tick2On:bool表示是否分别显示坐标轴(left/bottom,right/top)或者(primary,secondary)刻度线label1On,label2On:bool表示是否显示(left/bottom),right/top)或(primary,secondary)坐标轴的刻度值。每个Matplotlib对象都被视为子对象的容器。例如,每个图形将包含一个或多个轴对象,每个轴对象将包含其他表示图形内容的对象。Setaxisscale#设置轴的大小轴ax.xaxis.set_major_locator(MultipleLocator(1.000))ax.xaxis.set_minor_locator(AutoMinorLocator(4))ax.yaxis.set_major_locator(MultipleLocator(1.000))ax.yaxis.set_minor_locator(AutoMinorLocator(4))ax.xaxis.set_minor_formatter(FuncFormatter(minor_tick))#设置刻度轴范围ax.set_xlim(0,4)ax.set_ylim(0,4)#设置刻度参数ax.tick_params(which="major",width=1.0)ax.tick_params(which="major",length=10)ax.tick_params(which="minor",width=1.0,labelsize=10)ax.tick_params(which="minor",length=5,labelsize=10,labelcolor="0.25")#设置轴标签ax.set_xlabel("X轴标签")ax.set_ylabel("Y轴标签")Step6绘图matplotlib.axes.Axes.plot()Axes.plot([x],y,[fmt],data=None,**kwargs)用于绘制XY坐标系的点、线或其他标记形状。参数:x,y:类数组或极坐标。水平/垂直坐标系中的数据点,x为可选参数,默认为[0,...,N-1]。通常,参数x、y是长度为N的数组,也支持极坐标(相当于常量数组)。参数也可以是二维的,在这种情况下,每一列代表一个数据集。fmt:字符串,可选参数。格式化字符串,例如'ro'代表红色圆圈。格式字符串是快速设置基本线条样式的简写,这些以及更多可以通过关键字参数来实现。fmt='[color][marker][line]'color(颜色)、marker(标记点)、line(线)是可选的,比如指定line而不指定markerax.plot(X,Y1,c=(0.25,0.25,1.00),lw=2,label="蓝色信号",zorder=10)ax.plot(X,Y2,c=(1.00,0.25,0.25),lw=2,label="红色信号")ax.plot(X,Y3,linewidth=0,marker="o",markerfacecolor="w",markeredgecolor="k")绘图Step7配置图例如果要在可视化图形中使用图例,可以使用不同的图形元素分配标签。matplotlib.axes.Axes.legend()可以使用Axes.legend()命令创建最简单的图例。Axes.legend(*args,**kwargs)参数:labels:这个参数是旁边显示的标签列表。handles:此参数列表将添加到示例中。loc:位置参数,常用参数,可以传入位置字符串或位置代码,如下:LocationStringLocationCode'best'0'upperright'1'upperleft'2'lowerleft'3'lowerright'4'right'5'centerleft'6'centerright'7'lowercenter'8'uppercenter'9'center'10同时显示多个图例有时候,我们可能需要在同一张图上显示多个图例。使用Matplotlib,只能通过标准图例接口为图形创建一个图例。如果您尝试使用plt.legend()或ax.legend()方法创建第二个图例,那么第一个图例将被覆盖。但是,我们可以通过从头开始创建一个新的图例对象(图例艺术家)然后使用较低级别(较低级别)的ax.add_artist()方法来向绘图添加第二个图例。图,ax=plt.subplots(figsize=(10,6))lines=[]styles=['-','--','-.',':']x=np.linspace(0,10,1000)foriinrange(4):lines+=ax.plot(x,np.sin(x-i*np.pi/2),styles[i],color='black')ax.axis('equal')#设置第一个图例显示的线条和标签ax.legend(lines[:2],['lineA','lineB'],loc='upperright',frameon=False,fontsize=15)#创建第二个图例,通过add_artist方法添加到图中frommatplotlib.legendimportLegendleg=Legend(ax,lines[2:],['lineC','lineD'],loc='右下角',frameon=False,fontsize=15)ax.添加_艺术家(腿)
