笔记:共用横坐标、mdates时间刻度

主要功能:

  1. 双坐标轴
  2. 多子图共用一个横坐标
  3. 横坐标时间刻度设置(mdates)
  4. 自定义时间坐标轴起止时间(mdates)
# -*- 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'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()

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值