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

matplotlib多子图使用计数器作为图例显示为0如何修复

问题根因

你在调用pandas的plot()方法时错把计数器值传给了legend参数,该参数仅支持布尔值,作用是控制图例是否显示,传整数会被自动转为布尔值(非0即True),图例默认会取用Series的索引值作为标签,所以所有图例都显示为0。自定义图例标签需要传给label参数。
另外原代码还有一处拼写错误:plot_kernels函数的入参是mydict2,但循环中误用为my_dict2,会触发变量未定义报错,也需要同步修复。

修复后完整代码
import pandas as pd
import matplotlib.pyplot as plt

def plot_dataframe(df, cnt):
    row = df.iloc[0].astype(int)  # 取dataframe第一行
    # 绘制折线子图
    plt.subplot(2, 1, 1)
    # 自定义标签传label参数,同时设置legend=True显示图例
    row.plot(legend=True, label=str(cnt))   
    # 绘制柱状图子图
    plt.subplot(2, 1, 2)
    df2 = row.value_counts()
    df2.reindex().plot(kind='bar', legend=True, label=str(cnt))   
    

def plot_kernels(mydict2):
    plt.figure(figsize=(20, 15))
    cnt=1
    # 修复拼写错误:用入参名mydict2替代错误的my_dict2
    for key in mydict2:
        df = mydict2[key]
        plot_dataframe(df, cnt)
        cnt = cnt + 1
    plt.show()
可选优化

如果需要提升图表可读性,可给两个子图分别添加标题,修改示例如下:

def plot_dataframe(df, cnt):
    row = df.iloc[0].astype(int)
    plt.subplot(2, 1, 1)
    plt.title("数值折线图")
    row.plot(legend=True, label=str(cnt))

    plt.subplot(2, 1, 2)
    plt.title("数值分布柱状图")
    df2 = row.value_counts()
    df2.reindex().plot(kind='bar', legend=True, label=str(cnt))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:04