matplotlib:子图绘制
Posted xmcwm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matplotlib:子图绘制相关的知识,希望对你有一定的参考价值。
1、matplotlib绘图三部曲
(1)创建画布
(2)绘图——包含绘图与图形修饰
(3)绘图展示
2、折线图的绘制
(1)导入模块
import matplotlib.pyplot as plt
import numpy as np
将模块导入到脚本中,并更改名字为plt
(2)创建画布
fig = plt.figure(figsize=(20,10), dpi=120)
使用figure()方法创建画布,将创建好的画布赋值给变量fig,figsize=(x,y)参数用于设置画布大小,单位为英寸,dpi参数用于设置图片像素
matplotlib默认不支持中文和符号和字符
plt.rcParams[‘font.sans-serif‘] = ‘SimHei‘ plt.rcParams[‘axes.unicode_minus‘] = False
加入上面两行代码,使其能够显示中文和符号
fig.add_subplot(2, 1, 1)
使用add_subplot()方法为画布添加第一个坐标系,参数1为子图的行数,参数2为子图的列数,参数3表示当前为第几个子图
(3)绘图——包括绘图与图形修饰
-
准备横轴和纵轴数据(以国民经济核算嫉妒数据为例)
x = np.arange(1, 70)
y1 = np.array(
[1908.3, 3158.2, 4140.6, 5510.2, 2015.3, 3235.0, 4453.8, 5798.4, 2147.6, 3385.8,
4731.2, 5925.6, 2222.5, 3447.2, 5046.1, 6254.4, 2615.6, 4250.5, 6358.6, 7679.7,
2884.0, 4438.6, 6527.7, 7956.4, 3012.7, 4750.0, 6937.7, 8616.6, 3486.4, 5532.5,
8387.6, 10381.5, 4407.4, 6892.4, 9911.9, 11541.5, 4441.1, 6987.0, 10165.8, 12567.9,
4944.8, 7975.1, 11914.4, 14528.2, 5767.5, 9426.5, 14280.8, 16688.3, 6687.0, 10279.8,
15197.0, 18738.5, 7169.6, 10842.3, 16593.1, 20724.1, 7491.9, 11653.4, 17675.6,
21522.7, 7770.4, 12486.7, 18087.5, 22517.5, 8803.0, 13293.7, 18569.0, 23005.0,
8654.0])
y2 = np.array(
[9548.0, 11127.5, 11887.0, 13102.3, 10641.7, 12312.9, 12790.3, 13915.8, 11320.0,
13300.1, 14024.3, 15461.0, 13146.6, 15219.9, 16298.8, 18032.1, 15292.5, 18085.8,
19372.6, 21536.0, 18159.5, 21425.8, 22774.6, 25724.5, 21418.7, 25575.4, 26937.2,
30430.5, 25983.8, 31126.9, 32661.0, 36861.9, 31613.8, 38249.1, 38895.6, 41198.1,
32549.6, 39379.3, 41313.7, 46929.0, 39365.2, 47423.0, 48907.2, 55934.3, 47195.0,
56884.8, 58623.5, 64335.5, 52317.4, 61434.1, 62257.3, 68634.5, 55862.3, 65131.3,
66750.0, 74212.5, 59221.5, 69541.1, 71024.7, 77784.5, 60724.7, 71147.4, 71665.3,
78502.9, 61325.0, 73652.7, 75556.9, 85701.5, 70004.5])
y3 = np.array(
[9873.6, 9757.7, 9684.9, 10581.7, 11429.4, 11178.6, 11089.3, 12002.6, 12827.3,
12508.9, 12501.8, 13583.8, 14456.4, 13870.2, 13946.9, 15480.9, 16636.6, 16364.5,
16123.8, 17524.1, 19409.8, 18928.7, 18745.5, 20343.8, 22647.4, 22347.9, 22189.8,
24574.5, 27706.8, 28150.2, 28475.7, 31478.0, 33389.2, 33627.5, 33734.3, 36054.7,
37062.4, 37615.0, 38534.6, 41535.9, 43306.7, 44134.3, 45417.0, 49180.0, 51678.7,
52863.1, 54077.3, 57479.5, 58589.5, 59968.6, 61168.0, 65095.9, 66715.0, 67993.4,
69562.3, 73688.5, 73905.0, 75266.8, 77011.6, 81875.3, 82491.6, 84868.9, 86957.7,
91831.6, 91444.7, 93797.3, 96403.7, 102574.8, 102024.2])
数据一般以数组的形式来表示,这里x指的是横轴上的刻度,y1、y2和y3都是纵轴的数据
- 绘制折线图
plt.plot(x, y1) plt.plot(x, y2)
plt.plot(x, y3)
使用plot()方法绘制折线图
- 增加标题
plt.title("2000-2017年各产业、行业季度生产总值走势图")
使用title()方法为图表增加标题
- 增加纵轴名称
plt.ylabel("生产总值(亿元)")
使用ylabel()方法设置纵轴名称
- 增加图例
legend = ["第一产业", "第二产业", "第三产业"]
plt.legend(legend, loc=2)
增加图例的目的是让人能够更好的分别出每条折线分别代表什么,参数loc用于设置图例的所在位置
第二个子图:
fig.add_subplot(2, 1, 2)
使用add_subplot()方法为画布添加第一个坐标系,参数1为子图的行数,参数2为子图的列数,参数3表示当前为第几个子图
- 准备横轴和纵轴数据
x = np.arange(1, 70) y1 = np.array( [1947.5, 3209.7, 4196.1, 5590.2, 2061.6, 3297.0, 4524.0, 5897.5, 2206.3, 3463.1, 4820.1, 6046.2, 2292.1, 3537.3, 5154.5, 6396.6, 2698.4, 4360.7, 6494.9, 7856.8, 2986.8, 4571.0, 6690.4, 8168.0, 3133.1, 4907.4, 7129.6, 8866.2, 3624.6, 5711.0, 8614.1, 10674.0, 4573.7, 7103.6, 10166.0, 11855.8, 4618.6, 7219.9, 10448.7, 12936.1, 5136.3, 8229.6, 12231.9, 14932.3, 5979.6, 9719.4, 14639.0, 17145.0, 6921.7, 10600.3, 15602.8, 19243.9, 7427.6, 11196.5, 17049.6, 21299.9, 7776.7, 12039.6, 18185.1, 22164.4, 8079.7, 12924.7, 18645.9, 23261.5, 9153.0, 13779.4, 19184.0, 23848.0, 9041.0]) y2 = np.array( [8798.7, 9799.9, 10503.1, 11158.0, 9838.3, 10875.1, 11294.3, 11847.8, 10438.3, 11716.5, 12378.8, 13242.7, 12128.2, 13398.9, 14304.3, 15532.3, 14094.0, 15966.2, 17020.1, 18696.5, 16766.7, 18925.5, 20073.7, 22194.7, 19735.3, 22620.6, 23721.3, 26161.2, 23904.0, 27483.1, 28742.6, 31564.1, 29040.1, 33720.3, 34147.4, 34819.8, 29383.4, 33843.0, 35372.5, 39496.6, 35589.2, 40838.4, 41796.6, 46902.2, 42671.3, 48965.4, 49916.8, 53589.4, 47152.2, 52496.9, 52452.1, 56804.4, 50128.5, 55267.2, 55883.3, 61058.6, 52797.1, 58607.6, 59061.7, 63389.9, 53796.7, 59734.4, 59362.5, 63612.6, 54110.2, 61490.1, 62507.7, 69752.1, 61919.4]) y3 = np.array( [777.1, 1359.0, 1417.4, 1980.5, 834.2, 1472.7, 1532.2, 2106.3, 914.6, 1621.2, 1685.3, 2261.1, 1056.5, 1864.0, 2040.4, 2549.8, 1242.8, 2170.6, 2406.8, 2900.3, 1451.8, 2568.9, 2773.6, 3606.1, 1753.1, 3036.7, 3301.6, 4358.7, 2167.4, 3745.1, 4024.2, 5411.4, 2699.7, 4677.4, 4898.1, 6532.4, 3294.1, 5684.8, 6096.7, 7605.8, 3939.0, 6771.5, 7302.0, 9246.8, 4749.0, 8178.0, 8970.4, 11029.2, 5426.7, 9228.4, 10096.0, 12145.1, 6022.1, 10181.8, 11188.0, 13504.9, 6687.1, 11225.0, 12257.7, 14710.7, 7176.3, 11688.5, 12577.4, 15184.4, 7465.0, 12447.0, 13338.2, 16272.0, 8360.8])
- 绘制图形
plt.plot(x, y1)
plt.plot(x, y2)
plt.plot(x, y3)
- 增加纵轴名称
plt.ylabel("生产总值(亿元)")
- 设置横轴刻度
xticks = np.array( [‘2000年第一季度‘, ‘2000年第二季度‘, ‘2000年第三季度‘, ‘2000年第四季度‘, ‘2001年第一季度‘, ‘2001年第二季度‘, ‘2001年第三季度‘, ‘2001年第四季度‘, ‘2002年第一季度‘, ‘2002年第二季度‘, ‘2002年第三季度‘, ‘2002年第四季度‘, ‘2003年第一季度‘, ‘2003年第二季度‘, ‘2003年第三季度‘, ‘2003年第四季度‘, ‘2004年第一季度‘, ‘2004年第二季度‘, ‘2004年第三季度‘, ‘2004年第四季度‘, ‘2005年第一季度‘, ‘2005年第二季度‘, ‘2005年第三季度‘, ‘2005年第四季度‘, ‘2006年第一季度‘, ‘2006年第二季度‘, ‘2006年第三季度‘, ‘2006年第四季度‘, ‘2007年第一季度‘, ‘2007年第二季度‘, ‘2007年第三季度‘, ‘2007年第四季度‘, ‘2008年第一季度‘, ‘2008年第二季度‘, ‘2008年第三季度‘, ‘2008年第四季度‘, ‘2009年第一季度‘, ‘2009年第二季度‘, ‘2009年第三季度‘, ‘2009年第四季度‘, ‘2010年第一季度‘, ‘2010年第二季度‘, ‘2010年第三季度‘, ‘2010年第四季度‘, ‘2011年第一季度‘, ‘2011年第二季度‘, ‘2011年第三季度‘, ‘2011年第四季度‘, ‘2012年第一季度‘, ‘2012年第二季度‘, ‘2012年第三季度‘, ‘2012年第四季度‘, ‘2013年第一季度‘, ‘2013年第二季度‘, ‘2013年第三季度‘, ‘2013年第四季度‘, ‘2014年第一季度‘, ‘2014年第二季度‘, ‘2014年第三季度‘, ‘2014年第四季度‘, ‘2015年第一季度‘, ‘2015年第二季度‘, ‘2015年第三季度‘, ‘2015年第四季度‘, ‘2016年第一季度‘, ‘2016年第二季度‘, ‘2016年第三季度‘, ‘2016年第四季度‘, ‘2017年第一季度‘]) plt.xticks(x[::4], xticks[::4], rotation=45, horizontalalignment="center")
- 增加横轴名称
plt.xlabel("季度")
使用xlabel()方法设置横轴名称
- 增加图例
legend = [‘农林‘, ‘工业‘, ‘建筑‘]
plt.legend(legend, loc=2)
增加图例的目的是让人能够更好的分别出每条折线分别代表什么,参数loc用于设置图例的所在位置
- 保存图片
plt.savefig("./2000-2017年各产业、行业季度生产总值走势图.png")
使用savefig()方法将绘制出的折线图保存为图片,参数为图片的路径+名字
(4)绘图展示
plt.show()
使用show()方法展示绘制出的图形,不添加任何参数
3、最终效果
以上是关于matplotlib:子图绘制的主要内容,如果未能解决你的问题,请参考以下文章
python使用matplotlib:subplot绘制多个子图