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()方法创建画布,将创建好的画布赋值给变量figfigsize=(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绘制具有多个子图的图表

matplotlib:子图绘制

Matplotlib:每个时间序列子图绘制多条线

python使用matplotlib:subplot绘制多个子图

python使用matplotlib绘制多个子图时出现标题轴标签等文字重叠的解决

使用 matplotlib 子图绘制 pandas groupby 输出