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

如何将两个多列Pandas DataFrame绘入单个箱线图?遇AssertionError:1

解决连续调用Pandas boxplot触发AssertionError的问题

错误原因

你遇到的AssertionError:1来自Pandas箱线图内部的分组逻辑检查:当在同一个Axes上绘制多组数据时,数据列数与分组划分的余数不为0,触发断言失败。你的代码中两次调用df.boxplot()时未明确指定目标Axes,导致Pandas内部处理分组时出现冲突。

解决方案

核心是复用同一个Axes对象绘制两个DataFrame的箱线图,明确指定ax参数,避免全局绘图状态的混乱。

修正后的代码

match index:
    case 0:
        fig, ax = plt.subplots()
        # 指定绘制到创建好的ax上
        df.boxplot(ax=ax)
    case 1:
        # 复用同一个ax绘制第二个DataFrame的箱线图
        df.boxplot(ax=ax)

        min_y = min_y_8h - 0.25 * abs(min_y_8h)
        max_y = max_y_8h + 1.25 * abs(max_y_8h)

        x_ticks = ax.get_xticks()
        x_labels = [str(int(tick)) for tick in x_ticks if int(tick) % 3 == 0]
        # 筛选有效刻度的索引
        valid_indices = [i for i, tick in enumerate(x_ticks) if int(tick) % 3 == 0]
        ax.set_xticks([x_ticks[i] for i in valid_indices])
        ax.set_xticklabels(x_labels, rotation=45)
        ax.set_xlim(2.5, 23.5)
        ax.set_ylim(min_y, max_y)
        
        plt.show()
        plt.close()

额外注意事项

  • 如果两个DataFrame的列数不同,建议先对齐列(比如用pd.concat合并时补充缺失列为NaN),或者通过boxplot的positions参数手动指定每个箱线图的x轴位置,避免重叠或索引错乱。
  • 优先使用Axes对象的方法(如ax.get_xticks()、ax.set_xticks())代替Matplotlib的全局绘图函数,减少全局状态冲突的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:01:04