matplotlib 子图超过4个_走进Matplotlib世界(四)
回顾
在走进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世界(四)相关推荐
- matplotlib 子图超过4个_Matplotlib+Pandas:子图创建
为了能够更好的进行数据对比分析,有时需要将几个可视化图表进行对比显示.这时,就会用到该篇讲述的基于不同方式的子图创建过程. 知识点: Matplotlib中,一幅可视化图像被称为一个Figure: F ...
- matplotlib 子图超过4个_Matplotlib从入门到精通
Matplotlib从入门到精通mp.weixin.qq.com Matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.它提供了一整套和 matlab 相似的命 ...
- matplotlib 子图超过4个_Python数据分析:用Matplotlib可视化创建套图
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Trochil蜂鸟数据 ,作者 蜂鸟数据Trochil 一图胜千言 ...
- python 子图共用x轴_将matplotlib子块与共享x轴合并
我有两个图,它们都有相同的x轴,但是y轴的刻度不同. 具有规则轴的图是具有趋势线的数据,表示衰减,而y半对数标度表示拟合的精度.fig1 = plt.figure(figsize=(15,6)) ax ...
- matplotlib柱状图上方显示数据_使用 matplotlib 的两种姿势
点击上"蓝字"关注我们 本文环境说明熊猫本次用的是 Anaconda 的 jupyter notebook 编写的本文代码.今天用到的库都是已经集成好的,无须另行安装.每个库的版本 ...
- 2. Matplotlib子图与多子图
第1关:手动创建子图 任务:绘制一个包含两个样式不一致的子图. import matplotlib matplotlib.use("Agg") import numpy as np ...
- python用matplotlib画五角星_基于Matplotlib的Python绘图
# 使用该法,不用写plt.show(),以及可以边写边运行 %matplotlib notebook import matplotlib.pyplot as plt plt.rcParams['fo ...
- python plot label_python - matplotlib子图的通用xlabel / ylabel
python - matplotlib子图的通用xlabel / ylabel 我有以下情节: fig,ax = plt.subplots(5,2,sharex=True,sharey=True,fi ...
- 5绘制收银台程序_透视Matplotlib核心功能和工具包 - 高级特征绘制
关联知识 Matplotlib Python 使用属性循环器 Matplotlib具有默认的颜色循环,当我们在给定轴上绘制更多图形时,该颜色循环会重复进行. 通过属性循环程序,我们可以在单个函数中为多 ...
最新文章
- python 小波去噪,用Pywavelet去噪信号?
- Java单元测试(Junit+Mock+代码覆盖率)
- 网络组Network Teaming
- ubuntu查看node的安装目录_ubuntu安装nfs服务实现共享目录
- C语言高级编程:汇编分析i++和++i
- 数据库操作,内外联查询,分组查询,嵌套查询,交叉查询,多表查询,语句小结...
- 计算机维修知识综述论文,机器学习领域各领域必读经典综述论文整理分享
- 将Mongodb注册为Windows系统服务
- PAI算法组件详解:PLDA
- 25. 文件系统——源程序的编译安装(make,make install,ldd,ldconfig -v)
- 海康ehome协议及应用
- Jzoj4699 Password
- python回复qq_「转」使用python发送qq消息
- 计算机专业买哪一款华硕电脑好,华硕电脑哪款好
- 柔宇科技掀起的柔性电子潮流,正在加速改变我们的生活
- 《合成孔径雷达成像——算法与实现》之【1】仿真图2.2
- 2019年7月勒索病毒疫情分析
- Revit二次开发,新手接入IExternalCommand、IExternalApplication,如何使用它们!
- element ui table的show-overflow-tooltip属性以及设置其宽度
- javaMail 发送邮件 标题过长出现乱码