python绘图,控制sub子图的间距

使用 plt.subplots_adjust 或 fig.subplots_adjust 方法来控制两个子图之间的间距:

python 复制代码
# 假设 best_true_target_labels, best_pred, new_target_data_input, new_target_data 是由 trainer.train() 返回的
best_true_target_labels, best_pred, new_target_data_input, new_target_data = trainer.train()

if len(best_true_target_labels) == len(best_pred):
    index_length = len(best_true_target_labels)
    print("打印预测标签和真实标签的长度index_length:", index_length)
    i = index_length - 4

    # 创建两个图,每个图包含两个子图
    fig1, axs1 = plt.subplots(2, 1, figsize=(10, 10))
    fig2, axs2 = plt.subplots(2, 1, figsize=(10, 10))
    
    while i <= index_length - 1:
        # 拿到最后一个batch的数据去画input图像
        input_data = new_target_data_input[i]  # input_data.shape:torch.Size([1, 30])
        target_data = new_target_data[i]

        # input_data对应的数据标签
        input_data_labels_plot = best_true_target_labels[i]
        best_pred_plot = best_pred[i]

        input_data_flattened = input_data.flatten()  # 调整形状为 torch.Size([30])
        target_data_flattened = target_data.flatten()  # 调整形状为 torch.Size([31])

        # 创建从 1 开始的 x 轴序列
        x_values_input = range(1, input_data_flattened.shape[0] + 1)
        x_values_target = range(1, target_data_flattened.shape[0] + 1)

        # 根据i选择当前子图和图
        if i - (index_length - 4) < 2:
            ax = axs1[i - (index_length - 4)]
            fig = fig1
        else:
            ax = axs2[i - (index_length - 4) - 2]
            fig = fig2
        
        # 绘制input_data_flattened和target_data_flattened
        ax.plot(x_values_input, input_data_flattened.numpy(), label='Input Data', linewidth=2)
        ax.plot(x_values_target, target_data_flattened.numpy(), label='Target Data', linewidth=1)
        
        # 绘制 input_data_labels 在 x 轴 31 位置的点
        ax.scatter([31], input_data_labels_plot.numpy(), color='green', label='True Label', zorder=2)
        ax.scatter([31], best_pred_plot.numpy(), color='red', label='Predicted Label', zorder=2)

        ax.set_title(f'Input Data and Forecast Results for index {i}')
        ax.set_xlabel('Time Step')
        ax.set_ylabel('Value')
        ax.legend()
        
        # 扩展 x 轴的范围,以便后续绘图
        ax.set_xlim(0, max(len(input_data_flattened), len(target_data_flattened)) + 4)
        
        i += 1
    
    fig1.tight_layout()
    fig2.tight_layout()
    
    # 调整两个图的子图之间的间距
    fig1.subplots_adjust(hspace=0.4)  # 控制 fig1 子图之间的竖直间距
    fig2.subplots_adjust(hspace=0.4)  # 控制 fig2 子图之间的竖直间距
    
    fig1.suptitle('First Two Subplots')
    fig2.suptitle('Second Two Subplots')
    plt.show()

在这个代码中:

  1. 使用 fig1.tight_layout() 和 fig2.tight_layout() 调整每个图的子图布局,使其不重叠。
  2. 使用 fig1.subplots_adjust(hspace=0.4) 和 fig2.subplots_adjust(hspace=0.4) 来控制每个图中的子图之间的竖直间距。hspace 参数控制子图之间的竖直间距,值越大间距越大,你可以根据需要调整这个值。

通过这种方式,你可以更好地控制两个子图之间的间距,使图表的布局更加清晰和美观。

相关推荐
学逆向的13 分钟前
win32注入代码
开发语言·网络安全·api·win32
MoRanzhi120326 分钟前
第 3 篇 · 数据清洗与特征工程:从问题判定到特征构建
python·pandas·数据清洗·特征工程·缺失值处理·异常值检测·特征编码
Sarvartha39 分钟前
内部类知识
java·开发语言
刘科领1 小时前
使用ollama & openweb-ui 本地搭建自己的AI
人工智能·python·ui·ai
专业程序开发源1 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
夜雪一千1 小时前
Python 生成模拟地址数据:Faker之外的备选库
网络·windows·python
半亩码田1 小时前
C#转Python第4.8篇:正则表达式:Python re 模块 vs C# System.Text.RegularExpressions
python·正则表达式·c#
夜雪一千1 小时前
如何取消PyCharm自动识别test开头文件并进入测试模式
ide·python·pycharm
yi0111 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
小李不困还能学1 小时前
PyCharm远程开发连接失败排查与解决
ide·python·pycharm