python绘制⼦图技巧——plt.subplot和plt.subplots、及坐标轴修改
偶然发现python(matplotlib)中绘制⼦图有两种⽅法,⼀种是plt.subplot,另⼀种是plt.subplots,这篇博客说⼀下这两种⽅法的区别,⽤法,以及常⽤的⼀些函数。
plt.figure的作⽤是定义⼀个⼤的图纸,可以设置图纸的⼤⼩、分辨率等,例如
fig = plt.figure(figsize=(16,16),dpi=300)# 初始化⼀张画布
plt.plot() 是直接在当前活跃的的axes上⾯作图,注意是当前活跃的
知道这两点基础知识后,再来看subplot和subplots
plt.subplot
fig = plt.figure(figsize=(12,4), dpi=200)
for i in range(len(img)):
plt.subplot(1,len(img),i+1)
plt.imshow(img[i])
plt.show()
plt.subplot作⽤是指定⼦图的位置,⽐如说现在总共有1⾏10列,当前⼦图位于哪⾥;
使⽤这个函数时需要先定义⼀个⼤的图纸,因为subplot函数⽆法更改图纸的⼤⼩和分辨率等信息;所以必须通过fig = plt.figure(figsize=(12, 4), dpi=200)来定义图纸相关设置;
同时,后续对于这个函数便捷的操作就是直接⽤plt,获取当前活跃的图层
plt.subplots
fig, ax = plt.subplots(1,len(img), figsize=(15,10))
for i in range(len(img)):
ax[i].imshow(img[i])
plt.show()
使⽤plt.subplots函数时,可以直接在该函数内部设置⼦图纸信息
该函数返回两个变量,⼀个是Figure实例fig,另⼀个 AxesSubplot实例ax 。fig代表整个图像,ax代表坐标轴和画的⼦图,通过下标获取需要的⼦区域。
后续我们需要对⼦图操作时,直接ax[i].imshow(img[i])就⾏
与subplot的区别在于:(1)不需要通过plt来操作图层,每⼀个图层都有指定的axes;(2)⼀个写在for循环外⾯,⼀个写在⾥⾯;归根于原因还是suplots绘制多少图已经指定了,所以ax提前已经准备好了,⽽subplot函数调⽤⼀次就绘制⼀次,没有指定
subplot和subplots都可以实现画⼦图功能,只不过subplots帮我们把画板规划好了,返回⼀个坐标数组对象,⽽subplot每次只能返回⼀个坐标对象,subplots还可以直接指定画板的⼤⼩。
坐标轴修改
我们通常需要修改坐标轴⼤⼩、刻度等信息,不论是⼦图还是⼀张⼤图;下⾯来看⼀下subplots和subplot在修改坐标⽅⾯的差异
plt在修改坐标时直接写plt.xlabel();plt.ylabel();plt.xlim();plt.ylim()等等就⾏,但是axes和plt不⼀样,axes需要加上set,例
如:axes.set_xlabel();axes.set_xlim() 这⼀点需要格外注意
对于修改⼦图的坐标轴信息,很明显是subplots更⽅便,因为他有独⽴的axes,更⽅便让每⼀个⼦图的坐标轴不同,例如
fig, ax = plt.subplots(1,len(img), figsize=(15,10))
for i in range(len(img)):
ax[i].imshow(img[i])
ax[i].set_xlabel("test csdn")
#如果要单独修改坐标轴
ax[5].set_xlabel("test csdn")
plt.show()
如果是subplot修改的话,参考代码如下:
fig = plt.figure(figsize=(12,4), dpi=200)
for i in range(len(img)):
plt.subplot(1,len(img),i+1)
matplotlib中subplotplt.imshow(img[i])
plt.xlabel("csdn test")
plt.show()
当然,subplot也可以有返回值,但是这个返回值是⼀个⼀个的,并不是和subplots⼀样是⼀都给你
fig = plt.figure(figsize=(12,4), dpi=200)
for i in range(len(img)):
ax=plt.subplot(1,len(img),i+1)
#或者这样
# ax = a() 获取当前活跃的⼦图层
plt.imshow(img[i])
ax.set_xlabel("csdn test")#其实这样还是没法单个⼦图修改
plt.show()
xlabel、ylabel: 设置横轴、纵轴标签及⼤⼩
例如plt.xlabel("csdn test", fontsize=20)
xlim、ylim: 设置x、y坐标轴的起始点(从哪到哪)
例如plt.xlim(0,50)plt.ylim(0,60)
xticks、yticks: 设置坐标轴刻度的字体⼤⼩
例如icks(labelsize=20)
title: 设置图⽚的标题
例如 plt.title(“csdn test”)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论