python: matplotib.pyplot 绘制 多子图+多张表

Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。

绘制效果
参考代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline 
# 横轴为时间,需要将转换为时间类型
import datetime

# 打开并读取excel文件
io1 = r'E:\table1.xlsx'
io2 = r'E:\table2.xlsx'
# sheet_name: 第几张表,也可以是表名(string)
data1 = pd.read_excel(io1, sheet_name=1)
data2 = pd.read_excel(io2, sheet_name=1)
timeID_stations1ID_stations2
时间1value1.1value2.1
时间2value1.2value2.2
# 两张表的时间范围(横轴)相同,任意选择一个转换为时间datetime
data1的时间列为time1
times = data1['time1']
dates = []
for time in times:
	# time1 记录的格式为20220324(int)对应'%Y%m%d'
	# time2 记录的格式为'2022_03'对应格式为'%Y_%m', datetime自动填充日(d)为1
    date = datetime.datetime.strptime(str(time),'%Y%m%d').date()
    dates.append(date)

# 两张表站点相同,读取第一行变量名
stations = np.array(data1.columns)
# 除去第一例time,其余列为要绘制的28个站点的ID号
stations = stations[1:29]

# 绘图
count = 0 # 统计图的数量
# 创建新图型,设置整个图的大小
fig = plt.figure(figsize=(80,30))
# 一个站点一张图
for station in stations:
	#  读取的值为string,转为两张表中存储的int
    s = int(station)
    s1 = np.array(data1[s])
    s2 = np.array(era_data[s])
    # 字典存入数据框
    value1 = pd.DataFrame( data={'date': dates, 'value': value1})
    value2 = pd.DataFrame( data={'date': dates, 'value': value2})
    # 4行7列,add_subplot添加子图(几行,几列,第几张图)
    fig.add_subplot(4, 7, count + 1)
    # 一张图中多条折线:x轴相同,y轴不同
    plt.plot(dates, value1['value'], 'b-',linewidth=1)
    plt.plot(dates, value2['value'], 'r--',linewidth=1)
    # 每张图的标题
    plt.title(station)
    # 画完一张图+1
    count += 1

# 保存图片
fig.savefig('E:\\test.png')

图例图fig.lengend()
可以参考:matplotlib—在figure中为多幅子图添加一个legend(图例)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年3月25日 下午1:16
下一篇 2022年3月25日 下午1:31

相关推荐