首页 > 解决方案 > Matplotlib 在条形图中删除数据

问题描述

我有一个简单的条形图,我想在 matplotlib 中制作。它绘制了过去几个月的使用情况。我遇到的问题是月份列表和月份的使用都是 13 的长度。情节不断出现,只有 12 条。

在循环之外

month_names = []
for i in range(13):
    last_month = datetime.now() - relativedelta(months=i)

    # Create string of month name and year...
    text = format(last_month, '%b')
    month_names.append(text)

month_names.reverse()

在循环内部(我知道像这样迭代 df 通常是不可以的,但我有特定原因超出了这个问题的范围)

    month_1 = df.at[i, 'cwat01'] if df.at[i, 'cwat01'] != '' else 0
    month_2 = df.at[i, 'cwat02'] if df.at[i, 'cwat02'] != '' else 0
    month_3 = df.at[i, 'cwat03'] if df.at[i, 'cwat03'] != '' else 0
    month_4 = df.at[i, 'cwat04'] if df.at[i, 'cwat04'] != '' else 0
    month_5 = df.at[i, 'cwat05'] if df.at[i, 'cwat05'] != '' else 0
    month_6 = df.at[i, 'cwat06'] if df.at[i, 'cwat06'] != '' else 0
    month_7 = df.at[i, 'cwat07'] if df.at[i, 'cwat07'] != '' else 0
    month_8 = df.at[i, 'cwat08'] if df.at[i, 'cwat08'] != '' else 0
    month_9 = df.at[i, 'cwat09'] if df.at[i, 'cwat09'] != '' else 0
    month_10 = df.at[i, 'cwat10'] if df.at[i, 'cwat10'] != '' else 0
    month_11 = df.at[i, 'cwat11'] if df.at[i, 'cwat11'] != '' else 0
    month_12 = df.at[i, 'cwat12'] if df.at[i, 'cwat12'] != '' else 0
    month_13 = df.at[i, 'cwat13'] if df.at[i, 'cwat13'] != '' else 0
    months = [month_1,
              month_2,
              month_3,
              month_4,
              month_5,
              month_6,
              month_7,
              month_8,
              month_9,
              month_10,
              month_11,
              month_12,
              month_13]

情节(也在循环内)

    fig = plt.figure(figsize=(4, 1.2))






    plt.rcParams.update({'font.size': 4})
    plt.bar(month_names, months, color='grey', width = .5)

    plt.ylabel('Gallons')
    plt.xlabel('Month')
    plt.rcParams["font.family"] = "Times New Roman"


    ax = plt.axes()
    ax.yaxis.grid()
    imgdata = BytesIO()
    fig.savefig(imgdata, format='svg')
    imgdata.seek(0)  # rewind the data
    drawing = svg2rlg(imgdata)
    renderPDF.draw(drawing, the_statement.canvas, 15, 210)
    plt.close()

编辑:结果图

情节问题

标签: pythonmatplotlib

解决方案


通过更改最后一个条的颜色,我发现它们相互绘制,因为月份名称相同。这不是我所期望的行为,但回想起来是有道理的。

在此处输入图像描述

可能有一种奇特的方法可以解决此问题,但我只是将循环更改为此

month_names = []
for i in range(13):
    last_month = datetime.now() - relativedelta(months=i)

    # Create string of month name and year...
    if i == 0:
        text = format(last_month, ' %b')
    else:
        text = format(last_month, '%b')

    month_names.append(text)

month_names.reverse()

哪个解决了这个问题!这对我来说非常令人沮丧,所以我希望这对某人有所帮助

在此处输入图像描述


推荐阅读