matplotlib绘制子图 subplot
程序员文章站
2022-03-01 22:17:39
...
1.绘制子图
使用subplot() 方法,subplot()方法传入numrows,numcols,fignum参数:fignum范围是 1 到numrows*numcols
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0.0, 5.0, 50)
y1 = np.sin(x)
y2 = np.exp(x) * np.cos(x)
figures = plt.figure(1)
axeses = [plt.subplot(221), plt.subplot(224)]
plt.subplot(221)
lines=plt.plot(x, y1, x, y2)
plt.subplot(224)
plt.plot(x)
plt.setp(figures, facecolor='c')
plt.setp(lines, linestyle='dashdot')
plt.show()
另外,绘制的子图也可以不在矩形网格上, 使用axes()命令, 可以在指定位置为axes([left,bottom,width,height])绘图,其中所有参数值都为小数(0 to 1) 坐标,即是与原图的比值。
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
t = np.arange(0.0, 10.0, 0.01)
r = np.exp(-t[:1000]/0.05) # impulse response
x = np.random.randn(len(t))
s = np.convolve(x, r)[:len(x)]*dt # colored noise
# 默认主轴图axes是subplot(111)
plt.plot(t, s)
plt.axis([0, 1, 1.1*np.amin(s), 2*np.amax(s)])
#内嵌图
a = plt.axes([.65, .6, .2, .2], facecolor='y')
n, bins, patches = plt.hist(s, 400, normed=1)
plt.title('Probability')
plt.xticks([])
plt.yticks([])
#另外一个内嵌图
a = plt.axes([0.2, 0.6, .2, .2], facecolor='y')
plt.plot(t[:len(r)], r)
plt.title('Impulse response')
plt.xlim(0, 0.2)
plt.xticks([])
plt.yticks([])
plt.show()
2.绘制子图详解
MATLAB和pyplot, 都具有当前图框和当前子图的概念。此前所有绘图命令均适用于当前子图。 函数gca()"get current axes"返回当前子图(一个matplotlib.axes.Axes实例), 而gcf()"get current figure"返回当前图框(一个matplotlib.figure.Figure实例).
3.通过GridSpec来定制Subplot布局
GridSpec指定子图所放置的几何网格。
3.1 subplotgrid 示例
subplot2grid类似于“pyplot.subplot”,但是它从0开始索引。以下两句效果相同。
ax = plt.subplot2grid((2,2),(0, 0))
ax = plt.subplot(2,2,1)
subplot2grid 创建跨多个单元格的子图
ax1 = plt.subplot2grid((3,3), (0,0), colspan=3)
ax2 = plt.subplot2grid((3,3), (1,0), colspan=2)
ax3 = plt.subplot2grid((3,3), (1, 2), rowspan=2)
ax4 = plt.subplot2grid((3,3), (2, 0))
ax5 = plt.subplot2grid((3,3), (2, 1))
3.2 使用GridSpec 和 SubplotSpec
可以显式创建GridSpec并使用它们来创建子图
ax = plt.subplot2grid((2,2),(0, 0))
相当于
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])
gridspec提供类似数组的索引来返回SubplotSpec实例,所以也可以使用切片(slice)来合并单元格。
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1,:-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[-1,0])
ax5 = plt.subplot(gs[-1,-2])
3.3 调整GridSpec布局
当一个 GridSpec 实例显示使用,可以调整从gridspec创建的子图的布局参数。
gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.05, right=0.48, wspace=0.05)
这类似于tosubplots_adjust(之前的子图列表参数设置),但它只影响从给定GridSpec创建的子图。举例:
gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.05, right=0.48, wspace=0.05)
ax1 = plt.subplot(gs1[:-1, :])
ax2 = plt.subplot(gs1[-1, :-1])
ax3 = plt.subplot(gs1[-1, -1])
gs2 = gridspec.GridSpec(3, 3)
gs2.update(left=0.55, right=0.98, hspace=0.05)
ax4 = plt.subplot(gs2[:, :-1])
ax5 = plt.subplot(gs2[:-1, -1])
ax6 = plt.subplot(gs2[-1, -1])
参考
推荐阅读
-
Python Matplotlib绘制多子图详解
-
Python Matplotlib绘制多子图详解
-
python使用matplotlib在一个图形中绘制多个子图以及一个子图中绘制多条动态折线问题
-
python matplotlib画图库学习绘制常用的图
-
Python:matplotlib绘制线条图
-
python使用matplotlib绘制热图
-
Python使用matplotlib的pie函数绘制饼状图功能示例
-
python+matplotlib绘制3D条形图实例代码
-
matplotlib给子图添加图例的方法
-
Python第三方库——Matplotlib_在同个figure中绘制多个图并给出legend