回顾

在走进Matplotlib世界(三)中,我们继续介绍了Matplotlib修改图表的一些属性,包括图例、网格、主/次刻度、文本等。今天我们讨论一下Matplotlib中的子图。

子图的概念

在Matplotlib中,整个图像就是一个Figure对象,在Figure对象中可以包含一个或多个Axes对象,而每个Axes对象都是拥有自己的坐标系系统的绘图区域。在同一个Figure图像下的每个图表都代表这个图像的一个子图。

子图的创建方法

常用的子图创建方法一般有三种。

第一种,利用Figure对象的add_subplot方法生成子图然后再向其中填充图表。add_subplot方法的参数包括nrows, ncols, index以及可选参数。其中nrows, ncols是子图的行列大小,index是当前创建的子图的索引,即作为图像的第几个子图。

为了更好地展示图表,用到了numpy和pandas来创建数据。首先创建一个2*2共4个子图区域的图像,然后向其中的3个子图区域填充图表。注意,这里创建的4个区域只是占位符,不一定要去填充,而且不一定要根据顺序去填充。 ​

# 0、导入包import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 1、准备数据data1 = np.random.rand(100).cumsum()data2 = 50-np.random.rand(100).cumsum()# 2、创建图像fig = plt.figure(figsize=(6, 6), facecolor=(0, 1, 0, 1))# 3、绘图ax1 = fig.add_subplot(2, 2, 1)ax1.plot(data1)ax2 = fig.add_subplot(2, 2, 2)ax2.plot(data2)ax3 = fig.add_subplot(2, 2, 3)df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])ax3.plot(df)# 4、自定义设置ax1.set_title("No.1")ax2.set_title("No.2")ax3.set_title("No.3")# 5、保存图形(按需要使用)# plt.savefig(‘xxx.png’)# 6、显示图形plt.show()

运行后可以看到,在左上、右上、左下三个位置分别生成了图表,当然我们也可以根据需要或自己的喜好在4个子图区域中随意选择摆放图表的位置。

第一种创建方法

第二种,使用plt.add_subplots方法同时生成Figure对象和axes对象数组,每个axes对象就相当于一个子图。add_subplots方法的参数包括nrows, ncols, sharex, sharey, squeeze, subplot_kw, gridspec_kw。其中nrows, ncols就是子图的行列大小,共生成nrows*ncols个子图。sharex, sharey设置是否共享x轴或y轴,默认不共享。squeeze默认True,挤压多余尺寸,一般默认即可。subplot_kw、gridspec_kw可选参数,用来设置子图的属性。

首先使用subplots方法得到axes对象数组,然后分别取出相应子图进行设置,同样,这里创建的axes也只是占位符。​

# 0、导入包import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 1、准备数据data1 = np.random.rand(100).cumsum()data2 = 50-np.random.rand(100).cumsum()# 2、创建图像fig, axes = plt.subplots(2, 2, figsize=(6, 6), facecolor=(0, 1, 0, 1))# 3、绘图ax1 = axes[0, 0]ax1.plot(data1)ax2 = axes[0, 1]ax2.plot(data2)ax3 = axes[1, 0]df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])ax3.plot(df)# 4、自定义设置ax1.set_title("No.1")ax2.set_title("No.2")ax3.set_title("No.3")# 5、保存图形(按需要使用)# plt.savefig(‘xxx.png’)# 6、显示图形plt.show()

运行结果如下图所示。 可以看到,与之前先生成子图区域再填充的方法相比,生成axes数组会将坐标轴事先生成,即使不向其中添加图表,坐标轴也会展示在相应的位置。

第二种创建方法

第三种,利用pandas的DataFrame生成多系列图,然后拆分成子图。上述两种创建子图方法中的第三个子图都使用了pandas创建数据并在图表中展示了4条折线。这里我们依旧使用这个pandas数据,然后进行拆分直接生成子图。​

# 导入包import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 准备数据df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])# 拆分生成子图df.plot(figsize=(6, 6), subplots=True, layout=(2, 2))plt.show()

运行效果如下。这种拆分方式生成的子图默认就有图例,并共用了一个x轴。

第三种创建方法

在前两种子图创建方法中,我们发现各个子图之间的间距非常小,尤其是垂直方向上的间距,看着很不舒服,我们使用subplots_adjust方法来调整子图间的间距,subplots_adjust方法接收wspace, hspace两个参数分别表示水平方向和垂直方向上的间距。以第二种方法为例,我们向其中加入subplots_adjust方法。​

# 0、导入包import matplotlib.pyplot as pltimport numpy as np# 1、准备数据data1 = np.random.rand(100).cumsum()data2 = 50-np.random.rand(100).cumsum()# 2、创建图像fig, axes = plt.subplots(2, 2, figsize=(6, 6), facecolor=(0, 1, 0, 1))# 3、绘图ax1 = axes[0, 0]ax1.plot(data1)ax2 = axes[0, 1]ax2.plot(data2)ax3 = axes[1, 0]df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])ax3.plot(df)# 4、自定义设置ax1.set_title("No.1")ax2.set_title("No.2")ax3.set_title("No.3")# 调整子图间间距plt.subplots_adjust(wspace=0.2, hspace=0.4)# 5、保存图形(按需要使用)# plt.savefig(‘xxx.png’)# 6、显示图形plt.show()

再次运行后可以看到,各个子图之间已经不再那么拥挤了。

调整子图间距

内嵌图

除了像子图这种图表比较外,我们有时候也常常在已有的图表中再生成图表来进行比较,这种方式就叫做内嵌。​

# 0、导入包import matplotlib.pyplot as plt# 1、准备数据x = [1, 2, 3, 4]y1 = [10, 20, 30, 40]y2 = [40, 30, 20, 10]# 2、创建图像fig = plt.figure(figsize=(3, 3), dpi=100, facecolor=(0,1,0,1), edgecolor=(1,0,0,1), frameon=True, linewidth=1)# 3、绘图ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])# 在ax1中内嵌ax2 = fig.add_axes([0.2, 0.6, 0.25, 0.25])# 4、自定义设置ax1.plot(x, y1, 'r')ax1.set_title('No.1')ax2.plot(x, y2, 'b')ax2.set_title('No.2')# 5、保存图形(按需要使用)# plt.savefig(‘xxx.png’)# 6、显示图形plt.show()

运行结果如下图所示。

内嵌

子图和内嵌图在日常的图表表示中很常见,毕竟图表的最终目的还是展示分析。​

matplotlib 子图超过4个_走进Matplotlib世界(四)相关推荐

  1. matplotlib 子图超过4个_Matplotlib+Pandas:子图创建

    为了能够更好的进行数据对比分析,有时需要将几个可视化图表进行对比显示.这时,就会用到该篇讲述的基于不同方式的子图创建过程. 知识点: Matplotlib中,一幅可视化图像被称为一个Figure: F ...

  2. matplotlib 子图超过4个_Matplotlib从入门到精通

    Matplotlib从入门到精通​mp.weixin.qq.com Matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.它提供了一整套和 matlab 相似的命 ...

  3. matplotlib 子图超过4个_Python数据分析:用Matplotlib可视化创建套图

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Trochil蜂鸟数据 ,作者 蜂鸟数据Trochil 一图胜千言 ...

  4. python 子图共用x轴_将matplotlib子块与共享x轴合并

    我有两个图,它们都有相同的x轴,但是y轴的刻度不同. 具有规则轴的图是具有趋势线的数据,表示衰减,而y半对数标度表示拟合的精度.fig1 = plt.figure(figsize=(15,6)) ax ...

  5. matplotlib柱状图上方显示数据_使用 matplotlib 的两种姿势

    点击上"蓝字"关注我们 本文环境说明熊猫本次用的是 Anaconda 的 jupyter notebook 编写的本文代码.今天用到的库都是已经集成好的,无须另行安装.每个库的版本 ...

  6. 2. Matplotlib子图与多子图

    第1关:手动创建子图 任务:绘制一个包含两个样式不一致的子图. import matplotlib matplotlib.use("Agg") import numpy as np ...

  7. python用matplotlib画五角星_基于Matplotlib的Python绘图

    # 使用该法,不用写plt.show(),以及可以边写边运行 %matplotlib notebook import matplotlib.pyplot as plt plt.rcParams['fo ...

  8. python plot label_python - matplotlib子图的通用xlabel / ylabel

    python - matplotlib子图的通用xlabel / ylabel 我有以下情节: fig,ax = plt.subplots(5,2,sharex=True,sharey=True,fi ...

  9. 5绘制收银台程序_透视Matplotlib核心功能和工具包 - 高级特征绘制

    关联知识 Matplotlib Python 使用属性循环器 Matplotlib具有默认的颜色循环,当我们在给定轴上绘制更多图形时,该颜色循环会重复进行. 通过属性循环程序,我们可以在单个函数中为多 ...

最新文章

  1. python 小波去噪,用Pywavelet去噪信号?
  2. Java单元测试(Junit+Mock+代码覆盖率)
  3. 网络组Network Teaming
  4. ubuntu查看node的安装目录_ubuntu安装nfs服务实现共享目录
  5. C语言高级编程:汇编分析i++和++i
  6. 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结...
  7. 计算机维修知识综述论文,机器学习领域各领域必读经典综述论文整理分享
  8. 将Mongodb注册为Windows系统服务
  9. PAI算法组件详解:PLDA
  10. 25. 文件系统——源程序的编译安装(make,make install,ldd,ldconfig -v)
  11. 海康ehome协议及应用
  12. Jzoj4699 Password
  13. python回复qq_「转」使用python发送qq消息
  14. 计算机专业买哪一款华硕电脑好,华硕电脑哪款好
  15. 柔宇科技掀起的柔性电子潮流,正在加速改变我们的生活
  16. 《合成孔径雷达成像——算法与实现》之【1】仿真图2.2
  17. 2019年7月勒索病毒疫情分析
  18. Revit二次开发,新手接入IExternalCommand、IExternalApplication,如何使用它们!
  19. element ui table的show-overflow-tooltip属性以及设置其宽度
  20. javaMail 发送邮件 标题过长出现乱码

热门文章

  1. 理解计算机视觉中的损失函数
  2. 卷积神经网络如何处理一维时间序列数据?
  3. 利用OpenCV建立视差图像
  4. 超牛EXCEL操作技巧,用的好,会涨工资哦
  5. 服务器市场严酷竞争下的众生相
  6. px,em,rem,vh,vw,vmin,vmax的区别
  7. 网络编程中的关键问题总结
  8. 前端资源预加载并展示进度条
  9. Object-C代码练习【自定义对象的归档】
  10. C++中访问类的私有数据成员的第三种方法