主要功能:
- 双坐标轴
- 多子图共用一个横坐标
- 横坐标时间刻度设置(方便)
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
if __name__ == '__main__':
# 风速
data_df = pd.read_excel(r'E:\PT\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'E:\PT\20231021\3\data.xlsx', sheet_name='气温', header=None)
t_arr = np.array(data_df).flatten()
# 露点温度
data_df = pd.read_excel(r'E:\PT\20231021\3\data.xlsx', sheet_name='露点温度', header=None)
dewt_arr = np.array(data_df).flatten()
# 能见度
data_df = pd.read_excel(r'E:\PT\20231021\3\data.xlsx', sheet_name='能见度', header=None)
vis_arr = np.array(data_df).flatten()
# 气压
data_df = pd.read_excel(r'E:\PT\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.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S')) # 设置x轴标签的格式为日期时间格式
ax4.xaxis.set_major_locator(mdates.DayLocator()) # 设置x轴标签的间隔为每天一个标签
ax4.tick_params(axis='x', rotation=90) # 旋转x轴标签90度
# 显示画布
plt.tight_layout() # 自动调整子图间距,以适应子图大小和位置的变化
plt.show()