主要功能:
- 双坐标轴
- 多子图共用一个横坐标
- 横坐标时间刻度设置(简便方法)
- 自定义时间坐标轴起止时间
# -*- coding: utf-8 -*-import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdatesif __name__ == '__main__':# 风速data_df = pd.read_excel(r'G:\20231021\3\data.xlsx', sheet_name='风', na_values=['VRB', 'C'])data_arr = np.array(data_df)wind_d = data_arr[:, range(0, 48, 2)].flatten()wind_v = data_arr[:, range(1, 48, 2)].flatten()# 气温data_df = pd.read_excel(r'G:\20231021\3\data.xlsx', sheet_name='气温', header=None)t_arr = np.array(data_df).flatten()# 露点温度data_df = pd.read_excel(r'G:\20231021\3\data.xlsx', sheet_name='露点温度', header=None)dewt_arr = np.array(data_df).flatten()# 能见度data_df = pd.read_excel(r'G:\20231021\3\data.xlsx', sheet_name='能见度', header=None)vis_arr = np.array(data_df).flatten()# 气压data_df = pd.read_excel(r'G:\20231021\3\data.xlsx', sheet_name='气压', header=None)p_arr = np.array(data_df).flatten()# 画图x = pd.date_range(start='201711020100', end='201712020000', freq='H') # 生成时间序列(基于原始世界时转为北京时)# 创建一个包含4个子图的画布fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=4, ncols=1, figsize=(8, 10), sharex=True)# 在第一个子图上画图ax1.plot(x, wind_v, 'b')ax1.set_ylabel('wind/(m/s)')# 创建第一个子图的右侧纵坐标轴ax1_right = ax1.twinx()ax1_right.plot(x, vis_arr, 'r') # 替换 wind_v_right 为您的右侧纵坐标数据ax1_right.set_ylabel('vis/(m)') # 或者您想要的任何右侧纵坐标标签# 在第二个子图上画图ax2.plot(x, t_arr, 'b')ax2.set_ylabel('t(℃)')# 创建第2个子图的右侧纵坐标轴ax2_right = ax2.twinx()ax2_right.plot(x, vis_arr, 'r') # 替换 wind_v_right 为您的右侧纵坐标数据ax2_right.set_ylabel('vis/(m)') # 或者您想要的任何右侧纵坐标标签# 在第三个子图上画图ax3.plot(x, t_arr - dewt_arr, 'b')ax3.set_ylabel('t-td/(℃)')# 创建第3个子图的右侧纵坐标轴ax3_right = ax3.twinx()ax3_right.plot(x, vis_arr, 'r') # 替换 wind_v_right 为您的右侧纵坐标数据ax3_right.set_ylabel('vis/(m)') # 或者您想要的任何右侧纵坐标标签# 在第4个子图上画图ax4.plot(x, p_arr, 'b')ax4.set_ylabel('P/(0.1hPa)')ax4.set_xlabel('Time')# 创建第4个子图的右侧纵坐标轴ax4_right = ax4.twinx()ax4_right.plot(x, vis_arr, 'r') # 替换 wind_v_right 为您的右侧纵坐标数据ax4_right.set_ylabel('vis/(m)') # 或者您想要的任何右侧纵坐标标签ax4.set_xlim([mdates.date2num(np.datetime64('2017-11-19 21:00:00')),mdates.date2num(np.datetime64('2017-11-21 04:00:00'))])ax4.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S')) # 设置x轴标签的格式为日期时间格式ax4.xaxis.set_major_locator(mdates.HourLocator()) # 设置x轴标签的间隔为每天一个标签ax4.tick_params(axis='x', rotation=90) # 旋转x轴标签90度# 显示画布plt.tight_layout() # 自动调整子图间距,以适应子图大小和位置的变化plt.show()