CartPole问题绘制子图时遇TypeError:tuple无法解析为整数
解决CartPole绘图时的TypeError: 'tuple' object cannot be interpreted as an integer
错误原因
核心问题出在这行代码:
datapoints, state_num, _ = _, x_array.shape, _
这是完全错误的元组解包写法。x_array.shape返回的是表示数组维度的元组(比如CartPole数据通常是三维数组,形状为(数据点数量, 4, 1)),错误写法导致state_num被赋值为整个x_array.shape元组,后续range(0, state_num)要求参数为整数,传入元组直接触发TypeError。
修正后的代码
import numpy as np import matplotlib.pyplot as plt # 假设x_array、x_hat_array、t_array已提前定义 x_array = np.array(x_array) x_hat_array = np.array(x_hat_array) t_array = np.array(t_array) subplots = [] # 正确解包x_array的维度:提取数据点数量、状态数,忽略最后一个维度 datapoints, state_num, _ = x_array.shape # 批量创建对应状态数的子图(放在同一个画布) fig, subplots = plt.subplots(state_num, 1, figsize=(8, 6)) # 遍历每个状态绘制曲线 for i in range(state_num): subplots[i].plot(t_array, x_array[:, i, 0]) subplots[i].set_title(f'状态{i+1}') subplots[i].set_xlabel('时间') subplots[i].set_ylabel('数值') plt.tight_layout() plt.show()
额外优化说明
- 原代码循环创建子图会生成多个独立画布,改用
plt.subplots(state_num, 1)可一次性将所有子图放在同一画布,更符合子图使用场景。 - 若你的
x_array维度与示例不同(比如不是三维),需对应调整解包逻辑,确保state_num是整数类型。
内容的提问来源于stack exchange,提问作者BondJour
相关产品推荐
相关产品推荐

