Python 第三方模块 绘图 Matplotlib模块 辅助对象绘制

Line2D属性参考:https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D

1.设置画布(Figure):

matplotlib.pyplot.figure([figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True,**kwargs])
  #参数说明:None表示默认值来自全局设置
    figsize:指定画布大小;(<width>,<height>)
      默认为rcParams["figure.figsize"],[6.4, 4.8](640 x 480)
    dpi:指定图像分辨率
      默认为rcParams["figure.figsize"],100
    facecolor:指定图像背景颜色
      默认为rcParams["figure.edgecolor"],"white"
    edgecolor:指定图像边缘颜色
      默认为rcParams["figure.edgecolor"],"white"
    frameon:指定是否启用图框;bool;默认为False
    kwargs:指定其他属性;dict

#实例:
>>> plt.figure(figsize=(6.5,5),dpi=120,facecolor='#BBFFFF')

######################################################################################################################

#在不同的Figure上进行绘制:
>>> x=np.linspace(-3,3,50)
>>> y1=x**3-x
>>> y2=x**4+2*x**3-3*x**2
>>> plt.plot(x,y1)
[<matplotlib.lines.Line2D object at 0x0000014F75DE8C10>]
>>> plt.plot(x,y2)
[<matplotlib.lines.Line2D object at 0x0000014F75DE8F70>]
>>> plt.show()#默认画在1个Figure上(见下图1)
>>> plt.figure()
<Figure size 640x480 with 0 Axes>
>>> plt.plot(x,y1)
[<matplotlib.lines.Line2D object at 0x0000014F0006D8E0>]
>>> plt.figure()
<Figure size 640x480 with 0 Axes>
>>> plt.plot(x,y2)
[<matplotlib.lines.Line2D object at 0x0000014F000A6AF0>]
>>> plt.show()#这样就会画在2个Figure上(见下图2,3)

在这里插入图片描述
2.设置网格(Grid):

matplotlib.pyplot.grid([b=None,which="major",axis="both",**kwargs])
<ax>.grid([b=None,which='major',axis='both',**kwargs])
  #参数说明:None表示默认值来自全局设置
    ax:指定子图/坐标系对象;为matplotlib.axes._subplots.AxesSubplot/matplotlib.axes._axes.Axes
    b:指定是否显示网格;None(进行切换)/bool
  	  #如果还指定了其他参数,默认为True
    which:指定要设置哪种网格线;"major"(主要网格线)/"minor"(次要网格线)/"both"
  	axis:指定要设置哪个方向的网格线;"x"(垂直于x轴的)/"y"(垂直于y轴的)/"both"
    kwargs:指定其他属性;dict/键值对
      #为dict时,键为str;为键值对时,键不为str
      #常用属性见下图2

#实例:
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> a=[-15,-10,-5,20,25,30]
>>> b=[-5,-4,-3,6,7,8]
>>> plt.title('这是中文标题')
>>> plt.xlabel('这是 x 轴标签')
>>> plt.ylabel('这是 y 轴标签')
>>> plt.grid(axis='x',color='red',linestyle='-.',linewidth=2)
>>> plt.plot(a,b)
>>> plt.show()
#结果:见下图1

在这里插入图片描述
在这里插入图片描述
3.设置图例(Legend)
(1)设置图例区:

matplotlib.pyplot.legend([*<line>,<*label>,**kwargs])
  #注意:是图例区属性,非图例属性,图例属性和对应的Line对象相同
  #参数说明:
    kwargs:设置属性;dict/键值对;常用属性见下图2/3
      #为dict时键为str,为键值对时键非str
    label:指定图例的文本;strstr list
      #每个元素对应1个Line对象的图例文本
    line:指定Line对象;为单个Line对象或Line对象构成的列表
      #如果指定本参数,该参数中的元素将与label中的元素按顺序对应
      #如果不指定本参数,将按绘制顺序与与label中的元素对应

#实例:
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> x=range(2,26,2)
>>> y=range(0,12)
>>> a=[5,10,15,20,25,30]
>>> b=[3,4,5,6,7,8]
>>> plt.plot(a,b)
[<matplotlib.lines.Line2D object at 0x0000023BCE3D5988>]
>>> plt.plot(x,y)
[<matplotlib.lines.Line2D object at 0x0000023BCEC14A48>]
>>> plt.legend(['图例一','图例二'],loc=2,edgecolor='red',facecolor='#F5F5F5')
<matplotlib.legend.Legend object at 0x0000023BCE3DE9C8>
>>> plt.show()
#结果:见下图1
line1,=plt.plot(a,b)
line2,=plt.plot(x,y)
plt.legend((line1, line2),('图例一','图例二'),loc=2,edgecolor='red',facecolor='#F5F5F5')
plt.show()
#结果:见下图1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果不在.legend()中指定label的内容,可使用下面2种方法

(2)在,plot()中指定label内容:

在plt.plot()中指定label内容,再调用.legend()

#实例:
>>> import matplotlib.pyplot as plt
>>> x=range(2,26,2)
>>> y=range(0,12)
>>> a=[5,10,15,20,25,30]
>>> b=[3,4,5,6,7,8]
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> plt.plot(a,b,label='图例一')
[<matplotlib.lines.Line2D object at 0x00000238E96CD188>]
>>> plt.plot(x,y,label='图例二')
[<matplotlib.lines.Line2D object at 0x00000238E96CD908>]
>>> plt.legend(loc=2,edgecolor='red',facecolor='#F5F5F5')
<matplotlib.legend.Legend object at 0x00000238E96D3088>
>>> plt.show()
#结果:同上

(3)使用set_label()指定label内容:

<line>.set_label("<text>")
  #参数说明:
    line:指定要添加图例的Line对象
    text:指定图例的文本

>>> import matplotlib.pyplot as plt
>>> x=range(2,26,2)
>>> y=range(0,12)
>>> a=[5,10,15,20,25,30]
>>> b=[3,4,5,6,7,8]
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> line1,=plt.plot(a,b)#如果不加",",返回的是列表而非Line对象
#>>> line1=plt.plot(a, b)
#>>> line1.set_label('图例一')
#Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
#AttributeError: 'list' object has no attribute 'set_label'
>>> line2,=plt.plot(x,y)
>>> line1.set_label('图例一')
>>> line2.set_label('图例二')
>>> plt.legend(loc=2,edgecolor='red',facecolor='#F5F5F5')
<matplotlib.legend.Legend object at 0x00000238E9894308>
>>> plt.show()
#结果:同上

4.设置刻度(Tick)与刻度线(Tickline)
(1)指定刻度值:

matplotlib.pyplot.xticks([*<ticks>,*<labels>,**<kwargs>])
matplotlib.pyplot.yticks([*<ticks>,*<labels>,**<kwargs>])
  #参数说明:
    ticks:指定刻度的位置;list/tuple
    labels:指定刻度对应的标签文本;list/tuple
      #指定ticks时才能指定本参数
    kwargs:指定其他参数;dict/键值对
      #为dict时键为str,为键值对时键非str
      rotation:指定刻度标签的旋转角度;为标量,单位为角度

#实例:
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> x=range(2,26,2)
>>> y=range(0,12)
>>> plt.plot(x,y)
[<matplotlib.lines.Line2D object at 0x0000021E0B772A08>]
#x轴每隔3个显示一次刻度,旋转45°显示标签:
>>> plt.xticks(range(2,26,3),('the {} ticks'.format(i) for i in range(2,26,3)),rotation=45)
([<matplotlib.axis.XTick object at 0x0000021E0D9C4C48>, <matplotlib.axis.XTick object at 0x0000021E0B8006C8>, <matplotlib.axis.XTick object at 0x0000021E0D9C4188>, <matplotlib.axis.XTick object at 0x0000021E0EE66648>, <matplotlib.axis.XTick object at 0x0000021E0EE66B48>, <matplotlib.axis.XTick object at 0x0000021E0EE699C8>, <matplotlib.axis.XTick object at 0x0000021E0EE6D488>, <matplotlib.axis.XTick object at 0x0000021E0EE6DD88>], [Text(0, 0, 'the 2 ticks'), Text(0, 0, 'the 5 ticks'), Text(0, 0, 'the 8 ticks'), Text(0, 0, 'the 11 ticks'), Text(0, 0, 'the 14 ticks'), Text(0, 0, 'the 17 ticks'), Text(0, 0, 'the 20 ticks'), Text(0, 0, 'the 23 ticks')])
>>> plt.show()

在这里插入图片描述
(2)指定刻度范围:

plt.xlim((<start>,<end>)):指定x/θ坐标的刻度范围
plt.ylim((<start>,<end>))指定y/r坐标的刻度范围
<ax3d>.set_zlim(<start>,<end>):指定z坐标的刻度范围
  #没有plt.zlim()/<ax>.set_zlim(),但有<ax3d>.set_xlim()/<ax3d>.set_ylim()/<ax>.set_xlim()/<ax>.set_ylim()
  #参数说明:
    start:开始位置
    end:结束位置
    ax3d:指定3D绘图区

#实例:
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> x=range(2,26,2)
>>> y=range(0,12)
>>> plt.xlim((5,15))
(5.0, 15.0)
>>> plt.plot(x, y)
[<matplotlib.lines.Line2D object at 0x0000021E0EE71708>]
>>> plt.show()

在这里插入图片描述
(3)设置极坐标的刻度线对象:

其他参数参见:https://matplotlib.org/api/text_api.html?highlight=text#matplotlib.text.Text

matplotlib.pyplot.thetagrids([<angles>,labels=None,fmt=None,**kwargs]):获取/设置当前坐标区的极轴
  #如果不指定任何参数,或仅指定angles,则获取刻度线对象
  #参数说明:
    angles:指定角度,单位为°;float/float数组
    label:指定各角度的文本标签;str tuple
    fmt:指定如何格式化angles参数;格式化后将使用弧度制
      如:"%1.2f"保留2位小数
    kwargs:指定其他参数

#实例:
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> plt.polar()#转换为极坐标区
>>> angles=range(0,360,45)
>>> labels=('东','东北','北','西北','西','西南','南','东南')
>>> plt.thetagrids(angles,labels)
>>> plt.title('matplotlib.pyplot.thetagrids() 用法示例',pad=15)
>>> plt.show()#结果见下图

在这里插入图片描述
5.边框与坐标轴的设置:

<ax>=matplotlib.pyplot.gca():获取当前绘图区(Axes)
  <ax>.spines:获得当前绘图区的边框对象
  <ax>.spines["<direction>"]:获得当前绘图区某一侧的边框
    #参数说明:
      direction:可为"top"/"bottom"/"left"/"right"
  <ax>.xaxis:获得当前绘图区的x轴对象
  <ax>.yaxis:获得当前绘图区的y轴对象
<ax>=matplotlib.pyplot.gcf():获取当前画布(Figure)
#获得Axes/Figure对象后再来实现边框的隐藏和坐标轴的移动
<ax>.set_visible(False):隐藏边框/坐标轴
  #参数说明:
    ax:边框对象(包括坐标轴对象)

#实例:
>>> import matplotlib.pyplot as plt
>>> plt.gca()
<matplotlib.axes._subplots.AxesSubplot object at 0x0000017DBC0D5D08>
>>> plt.gcf()
<Figure size 640x480 with 1 Axes>

>>> import numpy as np
>>> x=np.arange(0,2*np.pi,np.pi/100)
>>> y=np.sin(x)
>>> plt.plot(x,y)
[<matplotlib.lines.Line2D object at 0x0000011BCFA6D348>]
>>> plt.xlabel('X axis')
Text(0.5, 0, 'X axis')
>>> plt.ylabel('Y axis')
Text(0, 0.5, 'Y axis')
>>> ticks=(0,np.pi/2,np.pi,3*np.pi/2,2*np.pi)
>>> labels=('0',r'$\frac{\pi} {2}$',r'$\pi$',r'$\frac{3\pi} {2}$',r'$2\pi$')
>>> plt.xticks(ticks,labels)#设置x坐标轴显示的数据
([<matplotlib.axis.XTick object at 0x0000011BCF4B61C8>, <matplotlib.axis.XTick object at 0x0000011BD1CCC1C8>, <matplotlib.axis.XTick object at 0x0000011BD1CC4688>, <matplotlib.axis.XTick object at 0x0000011BD1D18148>, <matplotlib.axis.XTick object at 0x0000011BD1D18848>], [Text(0, 0, '0'), Text(0, 0, '$\\frac{\\pi} {2}$'), Text(0, 0, '$\\pi$'), Text(0, 0, '$\\frac{3\\pi} {2}$'), Text(0, 0, '$2\\pi$')])
>>> ax=plt.gca()#获取当前的画布,gca means get current axes
>>> ax.spines['right'].set_visible(False)#设置右边框不显示
>>> ax.spines['top'].set_visible(False)#设置上边框不显示
>>> #ax.spines['top'].set_color('none')#设置颜色为无
... ax.xaxis.set_ticks_position('bottom')#设置x坐标轴的标签位置
>>> ax.yaxis.set_ticks_position('left')#设置y坐标轴的标签位置
>>> ax.spines['bottom'].set_position(('data',0))#设置x轴在(0,0)位置
>>> ax.spines['left'].set_position(('data',0))#设置y轴在(0,0)位置
>>> plt.show()#结果见下图1

在这里插入图片描述

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif']=['Microsoft YaHei']
>>> x=np.arange(-2*np.pi,2*np.pi,0.01)
>>> y1=np.sin(3*x)/x
>>> y2=np.sin(2*x)/x
>>> y3=np.sin(1*x)/x
>>> plt.title('线性图移动坐标轴示例')
Text(0.5, 1.0, '线性图移动坐标轴示例')
>>> plt.xlabel('x 轴')
Text(0.5, 0, 'x 轴')
>>> plt.ylabel('y 轴')
Text(0, 0.5, 'y 轴')
>>> plt.plot(x,y1,'--r',label='sin(3*x)/x')
[<matplotlib.lines.Line2D object at 0x000001AA57BE37C8>]
>>> plt.plot(x,y2,color='green',linestyle=':',label='sin(2*x)/x')
[<matplotlib.lines.Line2D object at 0x000001AA57BE3FC8>]
>>> plt.plot(x,y3,label='sin(1*x)/x')
[<matplotlib.lines.Line2D object at 0x000001AA57BE3988>]
>>> plt.legend(edgecolor='#87A3CC',facecolor='#F5F5F5')
<matplotlib.legend.Legend object at 0x000001AA57BE9CC8>
>>> ax=plt.gca()
>>> ax.spines['right'].set_visible(False)#获取绘图区的轴对象(spines),设置右边框不显示
>>> ax.spines['top'].set_visible(False)#获取绘图区的轴对象(spines),设置上边框不显示
>>> #ax.spines['right'].set_color('none')#设置颜色为none,效果同上
... #ax.spines['top'].set_color('none')
... #设置两个坐标轴在(0,0)位置相交
... ax.spines['left'].set_position(('data',0))
>>> ax.spines['bottom'].set_position(('data',0))
>>> ax.xaxis.set_ticks_position('bottom')#设置x坐标轴标签的位置
>>> ax.yaxis.set_ticks_position('left')#设置y坐标轴标签的位置
>>> plt.show()

在这里插入图片描述
6.填充补丁:

官方文档:https://matplotlib.org/api/patches_api.html
在这里插入图片描述

matplotlib.patches:填充各种形状的补丁
  #详情参见上图及官方文档

#实例:
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> import matplotlib.patches as mpathes
>>> x=np.arange(0.0,2.0,0.01)
>>> y=np.sin(2*np.pi*x)
>>> #获取当前绘图区:
... ax=plt.gca()
>>> #圆形:圆点(0.2,-0.25),半径0.2,红色
... circle=mpathes.Circle((0.2,-0.25),0.2,color='r')
>>> #长方形:左侧和底部坐标(0.25,0.75),宽0.25,高0.15,透明度0.5
... rect=mpathes.Rectangle((0.25,0.75),0.25,0.15,alpha=0.5)
>>> #正多边形:中心点坐标(1.0,0),点数6,中心到每个顶点的距离0.25
... regular_polygon=mpathes.RegularPolygon((1.0,0),6,0.25,color='g')
>>> #不规则多边形:polygon_point为要连接的点的坐标
... polygon_point=[[1.5,-0.75],[1.75,-1],[2.0,0],[1.5,-0.25]]
>>> polygon=mpathes.Polygon(polygon_point,color='#FF69B4',alpha=0.3)
>>> #椭圆形:中心点坐标(1.25, 0.75)横轴长度0.4,垂直轴长度0.2
... ellipse=mpathes.Ellipse((1.25,0.75),0.4,0.2,color='y')
>>> #将补丁添加到当前绘图区:
... ax.add_patch(circle)
<matplotlib.patches.Circle object at 0x0000024F98CE4408>
>>> ax.add_patch(rect)
<matplotlib.patches.Rectangle object at 0x0000024F98CE4A08>
>>> ax.add_patch(regular_polygon)
<matplotlib.patches.RegularPolygon object at 0x0000024F98CE4C88>
>>> ax.add_patch(polygon)
<matplotlib.patches.Polygon object at 0x0000024F98CE4E88>
>>> ax.add_patch(ellipse)
<matplotlib.patches.Ellipse object at 0x0000024F98CE4F88>
>>> plt.xlabel('x axis label')
Text(0.5, 0, 'x axis label')
>>> plt.ylabel('y axis label')
Text(0, 0.5, 'y axis label')
>>> plt.grid()
>>> plt.plot(x,y)
[<matplotlib.lines.Line2D object at 0x0000024F9569CEC8>]
>>> plt.show()#结果见下图

在这里插入图片描述
三.保存图像

matplotlib.pyplot.savefig(<fname>,dpi=None,facecolor='w',edgecolor='w',format=None,transparent=False):保存图像
  #调用plt.show()后,会创建1个新的空白的图片,所以注意要在plt.show()前调用plt.savefig()
  #参数说明:None表示默认值来自全局配置
    fname:指定文件名及路径;str
      #如果未设置format,则根据fname的扩展名推断;如果也没有扩展名,则采用全局配置
    dpi:指定保存图片的像素;单位为每英寸点数
    facecolor:指定保存的图像的画布颜色;str
    edgecolor:指定保存的图像的边缘颜色;str
    transparent:设置保存的图像的背景是否透明
      #上述3个参数都不影响plt.show()时图像的属性
    format:设置图像的格式

#实例:
>> import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['Microsoft YaHei']
x=range(2,26,2)
y=range(0, 12)
a=[5,10,15,20,25,30]
b=[3,4,5,6,7,8]
line1,=plt.plot(a,b)
line2,=plt.plot(x,y)
plt.legend((line1,line2),('图例一','图例二'),loc=2,edgecolor='red',facecolor='#F5F5F5')
plt.savefig('G:\\pic.png',facecolor="r",transparent=True)
plt.show()#结果见下图

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值