• 笔记:绘图进阶


    主要功能:

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    在这里插入图片描述

  • 相关阅读:
    【好书分享第十一期】深入Rust标准库(文末送书)
    【运维笔记】Docker 部署Kibana-7.4.0(在线Docker版)
    python报org.apache.spark.SparkException: Python worker failed to connect back.
    javaweb-Servlet体系结构
    磁盘空间占满导致confluence6.3不可用问题修复流程
    谋道翻译逆向
    使用HHDBCS管理Redis
    4 运算符与表达式
    第十三届蓝桥杯C++B组省赛 I 题——李白打酒加强版 (AC)
    一个60行的C语言FIFO队列的demo
  • 原文地址:https://blog.csdn.net/weixin_46604505/article/details/133961968