ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

9.Matplotlib subplot()函数用法详解

2022-08-13 09:31:56  阅读:188  来源: 互联网

标签:subplot plot plt 子图 Matplotlib add 详解 fig


在使用 Matplotlib 绘图时,我们大多数情况下,需要将一张画布划分为若干个子区域,之后,我们就可以在这些区域上绘制不用的图形。在本节,我们将学习如何在同一画布上绘制多个子图。

matplotlib.pyplot模块提供了一个 subplot() 函数,它可以均等地划分画布,该函数的参数格式如下:

plt.subplot(nrows, ncols, index)

nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。

例如: subplot(233)表示在当前画布的右上角创建一个两行三列的绘图区域(如下图所示),同时,选择在第 3 个位置绘制子图。

subplot()函数示意图
图1:示意图


如果新建的子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域。

  1. import matplotlib.pyplot as plt
  2. plt.plot([1,2,3])
  3. #现在创建一个子图,它表示一个有2行1列的网格的顶部图。
  4. #因为这个子图将与第一个重叠,所以之前创建的图将被删除
  5. plt.subplot(211)
  6. plt.plot(range(12))
  7. #创建带有黄色背景的第二个子图
  8. plt.subplot(212, facecolor='y')
  9. plt.plot(range(12))

上述代码运行结果,如下图所示:

subplot函数绘制子图
图2:subplot绘制结果


如果不想覆盖之前的图,需要使用 add_subplot() 函数,代码如下:

  1. import matplotlib.pyplot as plt
  2. fig = plt.figure()
  3. ax1 = fig.add_subplot(111)
  4. ax1.plot([1,2,3])
  5. ax2 = fig.add_subplot(221, facecolor='y')
  6. ax2.plot([1,2,3])

执行上述代码,输出结果如下:

subplot绘图函数
图3:add_subplot()绘图结果
 

通过给画布添加 axes 对象可以实现在同一画布中插入另外的图像。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import math
  4. x = np.arange(0, math.pi*2, 0.05)
  5. fig=plt.figure()
  6. axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
  7. axes2 = fig.add_axes([0.55, 0.55, 0.3, 0.3]) # inset axes
  8. y = np.sin(x)
  9. axes1.plot(x, y, 'b')
  10. axes2.plot(x,np.cos(x),'r')
  11. axes1.set_title('sine')
  12. axes2.set_title("cosine")
  13. plt.show()

输出结果如下:

matplotlib绘图
图4:输出结果图

标签:subplot,plot,plt,子图,Matplotlib,add,详解,fig
来源: https://www.cnblogs.com/55zjc/p/16582020.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有