前言
Matplotlib的可以把很多张图画到一个显示界面,在作对比分析的时候非常有用。
对应的有plt的subplot和figure的add_subplo的方法,参数可以是一个三位数字(例如111),也可以是一个数组(例如[1,1,1]),3个数字分别代表
- 子图总行数
- 子图总列数
- 子图位置
更多详情可以查看:matplotlib文档
下面贴出两种绘子图的代码
常用的三种方式
方式一:通过plt的subplot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import numpy as np import pandas as pd import matplotlib.pyplot as plt # author: chenqionghe # 画第1个图:折线图 x = np.arange( 1 , 100 ) plt.subplot( 221 ) plt.plot(x,x * x) # 画第2个图:散点图 plt.subplot( 222 ) plt.scatter(np.arange( 0 , 10 ), np.random.rand( 10 )) # 画第3个图:饼图 plt.subplot( 223 ) plt.pie(x = [ 15 , 30 , 45 , 10 ],labels = list ( 'ABCD' ),autopct = '%.0f' ,explode = [ 0 , 0.05 , 0 , 0 ]) # 画第4个图:条形图 plt.subplot( 224 ) plt.bar([ 20 , 10 , 30 , 25 , 15 ],[ 25 , 15 , 35 , 30 , 20 ],color = 'b' ) plt.show() |
方式二:通过figure的add_subplot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import numpy as np import pandas as pd import matplotlib.pyplot as plt # author: chenqionghe fig = plt.figure() # 画第1个图:折线图 x = np.arange( 1 , 100 ) ax1 = fig.add_subplot( 221 ) ax1.plot(x,x * x) # 画第2个图:散点图 ax2 = fig.add_subplot( 222 ) ax2.scatter(np.arange( 0 , 10 ), np.random.rand( 10 )) # 画第3个图:饼图 ax3 = fig.add_subplot( 223 ) ax3.pie(x = [ 15 , 30 , 45 , 10 ],labels = list ( 'ABCD' ),autopct = '%.0f' ,explode = [ 0 , 0.05 , 0 , 0 ]) # 画第4个图:条形图 ax4 = fig.add_subplot( 224 ) ax4.bar([ 20 , 10 , 30 , 25 , 15 ],[ 25 , 15 , 35 , 30 , 20 ],color = 'b' ) plt.show() |
方式三:通过plt的subplots
subplots返回的值的类型为元组,其中包含两个元素:第一个为一个画布,第二个是子图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import numpy as np import pandas as pd import matplotlib.pyplot as plt # author: chenqionghe fig,subs = plt.subplots( 2 , 2 ) # 画第1个图:折线图 x = np.arange( 1 , 100 ) subs[ 0 ][ 0 ].plot(x,x * x) # 画第2个图:散点图 subs[ 0 ][ 1 ].scatter(np.arange( 0 , 10 ), np.random.rand( 10 )) # 画第3个图:饼图 subs[ 1 ][ 0 ].pie(x = [ 15 , 30 , 45 , 10 ],labels = list ( 'ABCD' ),autopct = '%.0f' ,explode = [ 0 , 0.05 , 0 , 0 ]) # 画第4个图:条形图 subs[ 1 ][ 1 ].bar([ 20 , 10 , 30 , 25 , 15 ],[ 25 , 15 , 35 , 30 , 20 ],color = 'b' ) plt.show() |
运行结果如下
就是这么简单,
如何不规则划分
前面的两个图占了221和222的位置,如果想在下面只放一个图,得把前两个当成一列,即2行1列第2个位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import numpy as np import pandas as pd import matplotlib.pyplot as plt # author: chenqionghe # 画第1个图:折线图 x = np.arange( 1 , 100 ) plt.subplot( 221 ) plt.plot(x,x * x) # 画第2个图:散点图 plt.subplot( 222 ) plt.scatter(np.arange( 0 , 10 ), np.random.rand( 10 )) # 画第3个图:饼图 plt.subplot( 223 ) plt.pie(x = [ 15 , 30 , 45 , 10 ],labels = list ( 'ABCD' ),autopct = '%.0f' ,explode = [ 0 , 0.05 , 0 , 0 ]) # 画第3个图:条形图 # 前面的两个图占了221和222的位置,如果想在下面只放一个图,得把前两个当成一列,即2行1列第2个位置 plt.subplot( 212 ) plt.bar([ 20 , 10 , 30 , 25 , 15 ],[ 25 , 15 , 35 , 30 , 20 ],color = 'b' ) plt.show() |
运行结果如下
到此这篇关于Matplotlib绘制子图的常见几种方法的文章就介绍到这了,更多相关Matplotlib绘制子图内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/chenqionghe/p/12355018.html