视频软件App开发引领数字内容创作与分享的新时代
1253
2022-11-11
matplotlib绘图技巧详解(三)
目录
1、绘图区域设置 2、figure(画布)大小设置 3、标签与刻度设置 4、坐标轴标题、标签与图标题设置 5、添加文本注释、数据标签
1、绘图区域设置:为figure指定不同的axes区域
我们可以在一张图上绘制多个图形,当然,我们也可以将不同的图形绘制到多个不同的区域当中。共有如下几3种方式来实现绘图区域的设置。
通过figure对象调用add_subplot方法。通过plt的subplot方法。通过plt的subplots方法。
1)figure对象的add_subplot方法使用说明
首先需要显示的创建一个figure对象,通过调用figure对象的add_subplot方法,来分配不同的子绘图区域。通俗的来说,就是相当于得到一个"画板对象",然后在这个画板上,分配出不同的子绘图区域,每个区域可以绘制不同的图形。 add_subplot指定绘图布局,需要指定子绘图区域的行数、列数和当前要绘制的子区域。 add_subplot方法会返回每个子绘图区域的对象,调用该对象即可实现在子区域的图形绘制。 在绘制图形时,总是需要创建figure对象。如果没有显式创建,则plt会隐式创建一个figure对象。在绘制图形时,既可以使用plt来绘制,也可以使用子绘图对象来绘制。“如果使用plt对象绘制,则总是在最后创建的绘图区域上进行绘制。”
操作如下:
figure = plt.figure()axes1 = figure.add_subplot(2, 1, 1, facecolor="#eeeeee")axes2 = figure.add_subplot(2, 1, 2)plt.plot([1,2],[4,8])
结果如下:
① figure对象的add_subplot方法常用参数说明
add_subplot指定绘图布局:既可以使用三个参数分开传递,也可以使用一个参数整体传递。使用facecolor设置绘图区域的背景色。plt.subplots_adjust方法可以用来调整子图与子图之间的距离。(left,right,top,bottom,wspace,hspace)
② add_subplot指定绘图布局与facecolor设置绘图区域的背景色
figure = plt.figure()axes1 = figure.add_subplot(2, 1, 1, facecolor="#eeeeee")axes1.plot([1,2],[4,8])axes2 = figure.add_subplot("212")axes2.plot([1,8],[4,2])
结果如下:
③ plt.subplots_adjust方法调整子图与子图之间的距离
figure = plt.figure()axes1 = figure.add_subplot("221",facecolor="#eeeeee")axes1.plot([1,2],[4,8])axes2 = figure.add_subplot("222")axes2.plot([1,8],[4,2])axes3 = figure.add_subplot("223")axes3.plot([1,2],[4,8])axes4 = figure.add_subplot("224",facecolor="#eeeeee")axes4.plot([1,8],[4,2])# hspace和wspace参数最有用,只讲述这个plt.subplots_adjust(hspace=1,wspace=0.5)
结果如下:
3)plt的subplot方法的使用说明
plt.subplot方法,由于plt可以隐式的创建一个figure对象,因此使用这个方法,来指定绘图布局,不需要显示的创建figure对象。因为plt.subplot方法直接可以返回子绘图区域的axes对象。 实际上,这种创建子绘图区域的方式,底层也是通过第一种方式实现的。 因此,使用这种方式和add_subplot的使用方式,一摸一样。
① 演示如下
plt.subplot("121")plt.plot([1, 2, 3], "g--d")plt.subplot(1, 2, 2)plt.plot([2, 4, 1], "r-.o")plt.subplots_adjust(wspace=0.5)
结果如下:
4)plt的subplots方法的使用说明
通过plt的subplots方法创建子绘图区域,该方法返回一个元组。如果是一个子绘图对象,那么返回的是一个axes坐标系对象。如果是多个子绘图对象,则返回一个ndarray数组。 可以通过sharex与sharey来指定是否共享x轴与y轴。
操作如下:
figure,axes = plt.subplots(1,1)display(type(figure))display(type(axes))figure,axes = plt.subplots(2,2)display(type(figure))display(type(axes))
结果如下:
① 不使用sharex与sharey共享x轴与y轴
figure,axes = plt.subplots(2,2)axes[0,0].plot([1,4])axes[0,1].plot([6,2])axes[1,0].plot([3,7])axes[1,1].plot([8,4])
结果如下:
② 使用sharex与sharey共享x轴与y轴
figure,axes = plt.subplots(2,2,sharex=True,sharey=True)axes[0,0].plot([1,4])axes[0,1].plot([6,2])axes[1,0].plot([3,7])axes[1,1].plot([8,4])
结果如下:
2、figure(画布)大小设置
1)为什么要设置figure(画布)大小?
figure(画布)的大小,对于我们进行图形绘制很重要。 如果画布太小,当子绘图区域较多,可能会有些拥挤。因此我们要使用较大一点的画布,才能更好的摆放这些子图。
2)figure(画布)大小设置的2种方式
在调用plt.figure()显示创建figure对象时,通过figsize参数指定,单位为英寸。在创建figure对象后,可以通过figure对象的set_size_inches方法设置。
① 在显示创建figure对象的同时,通过figsize参数指定画布大小
plt.figure(figsize=(8,3))plt.plot([1,3,5,7],[4,9,6,8],"r-.o")
结果如下:
② 在显示创建figure对象后,通过set_size_inches()方法指定画布大小
figure = plt.figure()figure.set_size_inches(7,6)plt.plot([1,3,5,7],[4,9,6,8],"r-.o")
结果如下:
3)若隐式创建画布,怎么设置figure画布大小呢?
① 演示如下
figure = plt.gcf()figure.set_size_inches(6,5)plt.plot([1,3,5,7],[4,9,6,8],"g-o")
结果如下:
3、标签与刻度设置
1)使用说明
我们可以通过plt对象的相关方法来设置或获取标签与刻度等信息。 设置还是获取,取决于是否传递实际参数。当传递了参数,表示设置标签与刻度;当没有传递参数,表示获取标签与刻度。
2)标签与刻度设置的相关方法
plt.xlim 设置或获取x轴刻度范围。plt.ylim 设置或获取y轴刻度范围。plt.xticks 设置或获取x轴显示的刻度与标签。plt.yticks 设置或获取y轴显示的刻度与标签。plt.axis 可以同时设置或获取x与y轴的刻度范围,或者是取消刻度显示。
无参数:返回一个元组。(xmin, xmax, ymin, ymax)(xmin, xmax, ymin, ymax) 同时设置x与y轴的刻度范围。off 取消坐标轴显示。tight:坐标轴紧凑显示。
equal:x与y具有同样的长度。
操作如下:
plt.plot([1, 3, 5], [2, 4, 6])# 显示x轴刻度的范围display(plt.xlim())# 显示y轴刻度的范围display(plt.ylim())# 获取x轴的刻度与标签。display(plt.xticks())# 获取y轴的刻度与标签。display(plt.yticks())
结果如下:
3)x轴和y轴刻度范围的设置:plt.xlim()、plt.ylim()
plt.plot([1,3,5,7],[4,9,6,8],"r.-")plt.xlim([1,7])plt.ylim(4,9)
结果如下:
4)x轴和y轴刻度与标签的设置:plt.xticks()、plt.yticks()
默认情况下,标签就是我们设置的刻度信息。我们可以自定义每个刻度的显示标签。
plt.plot([2, 4, 8], [4, 7, 5], "b-o")plt.xlim([-2, 12])plt.xticks([2, 4, 8], ["偏低", "中等", "偏高"])
结果如下:
5)plt.axis()方法的使用
plt.axis 可以同时设置或获取x与y轴的刻度范围,或者是取消刻度显示。
无参数:返回一个元组。(xmin, xmax, ymin, ymax)(xmin, xmax, ymin, ymax) 同时设置x与y轴的刻度范围。off 取消坐标轴显示。tight:坐标轴紧凑显示。equal:x与y具有同样的长度。
① 获取x与y轴的刻度范围
plt.plot([2, 4, 8], [4, 7, 5], "b-o")plt.axis()
结果如下:
② 设置x与y轴的刻度范围
plt.plot([2, 4, 8], [4, 7, 5], "b-o")plt.axis((2,8,4,7))
结果如下:
③ 去掉坐标轴:plt.axis(“off”)
plt.plot([2, 4, 8], [4, 7, 5], “b-o”) plt.axis(“off”)
结果如下:
④ 设置x轴和y轴每个单位长度大小一致:plt.axis(“equal”)
plt.plot([2, 4, 8], [4, 7, 5], "b-o")plt.axis("off")
结果如下:
4、坐标轴标题、标签与图标题设置
1)坐标轴标题、标签与图标题设置的相关说明
关于本章知识的讲解,我们从两方面进行说明。 当一张figure画布上,只有一个图的时候,通过如下方式设置:
plt.xlabel 设置x轴的标签说明。plt.ylabel 设置y轴的标签说明。plt.xticks 设置x轴的刻度标签。plt.yticks 设置y轴的刻度标签。plt.title 设置标题。
当一张figure画布上,有多个图形的时候,通过如下方式设置,除了通过plt对象外,我们还可以通过子绘图对象来设置与获取标签与刻度。
ax.set_xlim 设置x轴刻度范围。ax.get_xlim 获取x轴刻度范围。ax.set_xticks 设置x轴显示的刻度。ax.get_xticks 获取x轴显示的刻度。ax.set_xticklabels 设置x轴显示的刻度标签。默认显示的是就是刻度值。ax.get_xticklabels 获取x轴显示的刻度标签。默认显示的是就是刻度值。
也可以设置标签说明与标题。
ax.set_xlabel 设置x轴的标签说明。ax.get_xlabel 获取x轴的标签说明。ax.set_title 设置标题。ax.get_title 获取标题。
说明:
“如果需要设置或者获取y轴,只需要将x换成y即可。”
2)一张figure画布上,只有一个图,怎么设置坐标轴标题、标签与图标题?
plt.plot([2, 4, 8], [4, 7, 5], "b-o")plt.xticks([2,4,8],["低","中","高"])plt.xlabel("x轴标签")plt.ylabel("y轴标签")plt.title("图标题")
结果如下:
3)一张figure画布上,有多个图形,怎么设置坐标轴标题、标签与图标题?
figure = plt.figure()axes1 = figure.add_subplot(2,1,1)axes1.plot([2,4,8],[4,7,5])axes1.set_xticks([2,4,8])axes1.set_xticklabels(["低","中","高"])axes1.set_xlabel("年龄")axes1.set_ylabel("数值大小")axes1.set_title("波动值")axes2 = figure.add_subplot(2,1,2)axes2.plot([2,4,8],[7,2,6])plt.subplots_adjust(hspace=0.5)
结果如下:
5、添加注解
1)什么是注解?
“注解”就是在图形上绘制文本等说明信息。
2)箭头和文本一次性设置:plt.annotate()
① 常用参数介绍
xy 箭头指向坐标xytext:文本起点坐标。(箭头尾部坐标)arrowprops:字典类型,可设置箭头的属性。facecolor:箭头的颜色。headwidth:箭头的宽度。width:箭身的宽度。headlength:箭头的长度。shrink:收缩大小。
常见参数用法如图:
② 举例如下
x = np.linspace(-10, 10, 100) plt.plot(x, -x ** 2, “r-”) plt.title(“抛物线图”) plt.annotate(“这是极大值点”, xy=(0,0), xytext=(-5,-40), arrowprops=dict(facecolor=“g”,width=1,headwidth=5))
结果如下:
3)箭头和文本分开设置
plt.text语法格式如下:plt.text(x,y,文本值)plt.arrow语法格式如下:plt.arrow(x,y,dx,dy,width=,head_width=,head_length)
① 常用参数如下
### plt.text添加普通文本plt.text:显示文本(基于坐标) plt.figtext:显示文本(基于图片)* x,y:文本点的坐标。* 文本值:给这个点添加文本注释。### plt.arrow添加箭头* x,y:箭头的起点坐标。* dx,dy:基于起点坐标的偏移量。* width:箭头尾部的宽度。* head_width:箭头的宽度。* head_length:箭头的长度。* alpha:表示箭头的透明度。范围是0-1。
关于dx、dy的用法演示:
② 举例如下:
x = np.linspace(-10, 10, 100)plt.plot(x, -x ** 2, "r-")plt.title("抛物线图")plt.text(-3.5, -50, "这是极值点")plt.arrow(-2.5,-45,2.5,42,width=0.001,head_width=1,head_length=2,color="b")
结果如下:
4)给图形上的坐标点添加数据标签
① 例一
x = np.linspace(0,10,100)y = -x**2plt.xlim(0,100)plt.ylim(0,100)plt.title("抛物线")plt.plot(x,y)for xy in zip(x,y): plt.annotate("(%s,%s)" % xy, xy=xy)
结果如下:
② 例二
x = np.arange(1,13)y = np.array([1234,871,2222,3123,5612,2222,4123,3214,999,6000,5423,3123])plt.plot(x,y,"ro-",label="每月工资")plt.title("张三1-12月工资")plt.xlabel("月份")plt.ylabel("工资")plt.legend(loc="best")for xy in zip(x,y): plt.annotate("{}".format(xy[1]),xy=xy,ha="center",va="bottom") plt.savefig("张三工资",dpi=300,facecolor="g")
结果如下:
③ 例三“添加注释的第2种方式
x = np.arange(1,13)y = np.array([1234,871,2222,3123,5612,2222,4123,3214,999,6000,5423,3123])plt.plot(x,y,"ro-",label="每月工资")plt.title("张三1-12月工资")plt.xlabel("月份")plt.ylabel("工资")plt.legend(loc="best")for x,y in zip(x,y): plt.text(x,y,y,ha="center",va="bottom",fontsize=10)
结果如下:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~