Python 第三方模块 绘图 Matplotlib模块 文本描述

    技术2022-07-11  73

    文本信息查看:https://matplotlib.org/api/text_api.html#matplotlib.text.Text

    1.添加标题:

    matplotlib.pyplot.title("<title>"[,**fontdict=None,loc=None,pad=None]):添加标题 #参数说明:None表示默认值来自全局配置 title:指定标题文本;str fontdict:指定标题外观;dict/键值对 #使用键值对时键不为str,使用dict时键为str 默认值为{"fontsize":rcParams["axes.titlesize"], #即'large' "fontweight":rcParams["axes.titleweight"], #即'normal' "color":rcParams["axes.titlecolor"] #即'auto' "verticalalignment":"baseline", "horizontalalignment":loc} loc:指定标题横向位置;str 默认值为rcParams["axes.titlelocation"],"center" 还可为"left"/"right" pad:标题距离上边框线的偏移量;float,单位为磅 默认值为rcParams["axes.titlepad"],6.0 #pad<0时相当于0 #实例: >>> import matplotlib.pyplot as plt >>> x=range(2,26,2) >>> y=range(0,12) >>> plt.title('x-y title',pad=20) Text(0.5, 1.0, 'x-y title') >>> plt.plot(x, y) [<matplotlib.lines.Line2D object at 0x0000012CC2D38A88>] >>> plt.show()

    2.为坐标轴添加标签:

    matplotlib.pyplot.xlabel("<xlabel>"[,**fontdict=None,labelpad=None]):为x轴添加标签 matplotlib.pyplot.ylabel("<ylabel>"[,**fontdict=None,labelpad=None]):为y轴添加标签 #参数说明:None表示默认值来自全局配置 xlabel,ylabel:指定标签文本;str fontdict:指定标签外观;dict/键值对 #为键值对时键不为str,为dict时键为str 默认值为{"fontsize":rcParams["axes.titlesize"], #即"large" "fontweight":rcParams["axes.titleweight"], #即"normal" "color":rcParams["axes.titlecolor"], #即"auto" "verticalalignment":"baseline", "horizontalalignment":"center"} labelpad:标签距离对应坐标轴的偏移量;float,单位为磅 默认值为rcParams["axes.titlepad"],6.0 #ylabel在y轴左侧,xlabel在x轴下方;labelpad<0时相当于0 #实例: >>> import matplotlib.pyplot as plt >>> x=range(2,26,2) >>> y=range(0,12) >>> a=[2,3,1,4,1,3,5,2,3,1,1] >>> b=[1,2,3,4,5,6,7,8,9,10,11] >>> plt.title('x-y and a-b title') Text(0.5, 1.0, 'x-y and a-b title') >>> plt.xlabel('x label',fontdict={'color':'red'},labelpad=15.0) Text(0.5, 0, 'x label') >>> plt.ylabel('y label',color='blue',labelpad=15.0) Text(0, 0.5, 'y label') >>> plt.plot(x,y) [<matplotlib.lines.Line2D object at 0x0000012CC3851088>] >>> plt.plot(a,b) [<matplotlib.lines.Line2D object at 0x0000012CC4D29AC8>] >>> plt.show()

    3.添加文本说明:

    TextWithDash参考:https://matplotlib.org/api/text_api.html#matplotlib.text.TextWithDash Text参考:https://matplotlib.org/api/text_api.html#matplotlib.text.Text

    (1)添加2D图像的文本说明:

    matplotlib.pyplot.text(<x>,<y>,"<text>"[,**fontdict=None,ha="left",va="baseline",withdash=False]):在任意位置添加说明文本 #参数说明: x,y:指定说明文本的x,y坐标 text:指定说明文本;str fontdict:指定说明文本的外观;dict/键值对 #为键值对时键不为str,为dict时键为str 默认值为{"fontsize":rcParams["axes.titlesize"], #即"large" "fontweight":rcParams["axes.titleweight"], #即"normal" "color":rcParams["axes.titlecolor"], #即"auto" "verticalalignment":"baseline", "horizontalalignment":"center"} ha:注释文本的水平相对位置 可为"left"/"right"/"center" va:注释文本的垂直相对位置 可为"top"/"bottom"/"center"/"baseline"/'center_baseline' withdash:True,创建1个TextWithDash实例;False,创建1个Text实例 #TextWithDash类将在Matplotlib 3.3中被删除 #实例: >>> import matplotlib.pyplot as plt >>> plt.rcParams['lines.marker']='o'#设置数据点的形状 >>> a=[5,10,15,20,25,30] >>> b=[3,4,5,6,7,8] >>> plt.text(4,3.2,'text1') Text(4, 3.2, 'text1') >>> plt.text(9,4.2,'text2') Text(9, 4.2, 'text2') >>> plt.text(14,5.2,'text3') Text(14, 5.2, 'text3') >>> plt.text(19,6.2,'text4') Text(19, 6.2, 'text4') >>> plt.text(24,7.2,'text5') Text(24, 7.2, 'text5') >>> plt.text(27.5,7.9,'text6') Text(27.5, 7.9, 'text6') >>> plt.title('a-b title') Text(0.5, 1.0, 'a-b title') >>> plt.xlabel("x") Text(0.5, 0, 'x') >>> plt.ylabel("y") Text(0, 0.5, 'y') >>> plt.plot(a,b) [<matplotlib.lines.Line2D object at 0x0000012CC53D9908>] >>> plt.show()

    matplotlib.pyplot.annotate(<text>,xy=[<x>,<y>],xytext=[<xt>,<yt>],xycoords="data",textcoords=xycoords,ha="left",va="baseline",**arrowprops):功能类似.text(),更高级 #参数说明:其他参数同.text() x,y:指定被注释的数据点的x,y坐标;为标量 xy,yt:指定说明文本的x,y坐标;默认和x,y相同;为标量 xycoords:指定被注释的数据点的参考系;默认为"data" 可取的值见 表1 textcoords:指定说明文本的坐标点的参考系;默认同xycoords 可取的值见 表2 arrowprops:指定注释箭头(从说明文本指向被注释的数据点)的样式;dict,键为str 部分可取的键见表3 键arrowstyle可取的值见表4 键connectionstyle的描述见表5,样式见表6 #也可以写为dict(<key>=<value>)的形式,此时key非str #实例: >>> import numpy as np >>> import matplotlib.pyplot as plt >>> x=np.arange(-2*np.pi,2*np.pi,0.01) >>> y=np.sin(1*x)/x >>> plt.title("Title") Text(0.5, 1.0, 'Title') >>> plt.xlabel('x') Text(0.5, 0, 'x') >>> plt.ylabel('y') Text(0, 0.5, 'y') >>> plt.plot(x,y) [<matplotlib.lines.Line2D object at 0x00000208F654C988>] >>> plt.annotate(r'$\lim_{x\to 0}\frac{\sin(x)}{x}=1$',#LaTeX表达式作为说明文本 ... xy=[0,1],#被注释的数据点的坐标 ... xycoords='data',#被注释的数据点的坐标的参考系 ... xytext=[50,-40],#说明文本的坐标 ... textcoords='offset points',#说明文本的坐标的参考系 ... fontsize=16,#字体大小 ... arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))#箭头样式 #相当于arrowprops={"arrowstyle":"->","connectionstyle":"arc3,rad=.2"}) Text(50, -40, '$\\lim_{x\\to 0}\\frac{\\sin(x)}{x}=1$') >>> plt.show() #结果见下图1

    表3中的其他键参考:https://matplotlib.org/api/_as_gen/matplotlib.patches.FancyArrowPatch.html#matplotlib.patches.FancyArrowPatch 表5中的其他键参考: https://matplotlib.org/api/_as_gen/matplotlib.patches.PathPatch.html#matplotlib.patches.PathPatch (2)添加3D图像的文本说明:

    其他参数参见:https://matplotlib.org/api/text_api.html

    <ax3d>.text(<x>,<y>,<z>,<s>[,zdir=None,**kwargs]) #参数说明:zdir同<ax3d>.plot() x,y,z:指定说明文本的x/y/z坐标 s:指定要添加的文本 #实例: >>> import matplotlib.pyplot as plt >>> fig=plt.figure() >>> ax=fig.gca(projection='3d') >>> zdirs=(None,'x','y','z',(1,1,0),(1,1,1)) >>> xs=(1,4,4,9,4,1) >>> ys=(2,5,8,10,1,2) >>> zs=(10,3,8,9,1,8) >>> for zdir,x,y,z in zip(zdirs,xs,ys,zs): ... label='(%d,%d,%d),dir=%s'%(x,y,z,zdir) ... ax.text(x,y,z,label,zdir) ... Text(1, 2, '(1,2,10),dir=None') Text(4, 5, '(4,5,3),dir=x') Text(4, 8, '(4,8,8),dir=y') Text(9, 10, '(9,10,9),dir=z') Text(4, 1, '(4,1,1),dir=(1, 1, 0)') Text(1, 2, '(1,2,8),dir=(1, 1, 1)') >>> ax.text(9,0,0,"red",color='red') Text(9, 0, 'red') >>> ax.text2D(0.05,0.95,"2D Text",transform=ax.transAxes) Text(0.05, 0.95, '2D Text') >>> ax.set_xlim(0, 10) (0.0, 10.0) >>> ax.set_ylim(0, 10) (0.0, 10.0) >>> ax.set_zlim(0, 10) (0.0, 10.0) >>> plt.show()#结果见下图

    4.LaTeX的使用:

    参见:https://matplotlib.org/tutorials/text/mathtext.html

    LaTeX是1种基于TeX的排版系统,常用于生成复杂表格和数学公式 Matplotlib提供自己的TeX表达式解析器/布局引擎/字体 布局引擎基于 Donald Knuth的TeX布局算法改编而来 格式:$<LaTeX>$ #实例: import numpy as np import matplotlib.pyplot as plt >>> t=np.arange(0.0,2.0,0.01) >>> s=np.sin(2*np.pi*t) >>> plt.title(r'$\alpha_i > \beta_i$',fontsize=20) >>> plt.text(1,-0.6,r'$\sum_{i=0}^\infty x_i$',fontsize=20) >>> plt.text(0.6,0.6,r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',fontsize=20) >>> plt.xlabel('time (s)') >>> plt.ylabel('volts (mV)') >>> plt.plot(t,s) >>> plt.show()

    Processed: 0.015, SQL: 9