You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复Matplotlib报AxesSubplot object is not subscriptable错误

报错根因

AxesSubplot object is not subscriptable 是matplotlib子图绘制的典型常见错误:
当你调用plt.subplots(num)创建子图时,若传入的子图总数num(也就是你代码里的len(stocks_list))等于1,matplotlib不会返回Axes对象数组,会直接返回单个AxesSubplot实例。单个实例不支持下标索引操作,你在循环里写axs[count]时就会触发该报错。

修复方案

以下方案任选其一即可解决问题,推荐优先选方案2,改动量最小:

  • 方案1:调用subplots时添加squeeze=False参数,强制返回Axes数组
    将原代码中创建子图的行修改为:
    fig, axs = plt.subplots(len(stocks_list), squeeze=False)
    
    该参数会让matplotlib不管子图数量是多少,始终返回数组格式的axs对象。注意此时返回的axs是二维数组,你可以在这行之后加一句axs = axs.flatten()把它转成一维数组,后续循环里的axs[count]写法就不需要任何改动。
  • 方案2:单图场景下手动将axs转为列表,统一访问逻辑
    在创建子图的代码后加2行判断即可,原有循环逻辑完全不用改:
    fig, axs = plt.subplots(len(stocks_list))
    # 单张子图时转成单元素列表,兼容下标访问
    if len(stocks_list) == 1:
        axs = [axs]
    
  • 方案3:显式指定子图排列参数,消除隐式传参歧义
    创建子图时明确写清行列数,再做单图兼容,代码可读性更高:
    n_stock = len(stocks_list)
    fig, axs = plt.subplots(nrows=n_stock, ncols=1, figsize=(10, 3*n_stock))
    if n_stock == 1:
        axs = [axs]
    
    这里额外加的figsize参数可以根据股票数量自动调整画布高度,避免子图太挤,你可以按需选用。
额外优化提示

你当前代码里随机选颜色的逻辑可能给不同股票分配重复颜色,如果需要规避这个问题,可以在循环外先把颜色列表按股票数量取样不重复值,再按顺序分配即可,该调整和本次报错无关,按需修改即可。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:42:09