首页 > 解决方案 > 为什么 matplotlib 会为我绘制叠加旧图形的新图形?

问题描述

我正在处理django项目并使用该matplotlib库。从理论上讲,我创建了一个过滤器,您可以在其中选择要绘制图形的日期和“节点”,并使用此信息python执行一个脚本,该脚本与 pandas 和 matplotlib 一起创建一个图形。

“node”和“day”的值正确到达脚本,这很好地生成了图形。但唯一错误的是,不是覆盖旧图像(使用以前的图形),而是在其上绘制新线。接下来我展示它的外观图像。

在此处输入图像描述

如您所见,每一行都相当于不同的一天,因为它一直在重叠我所做的不同测试。谁能告诉我我失败的地方?

下面我附上代码

def bateria2(node, day):
    csv_path = os.path.join(os.path.dirname(__file__), '..\\data\\csv\\dataframe.csv')
    df = pd.read_csv(csv_path)

    mes, anyo = 12, 2019
    new_df = df[(df['Dia'] == day) & (df['Mes'] == mes) & (df['Año'] == anyo) & (df['Node name'] == node)]

    if len(new_df) > 0:
        #os.remove('static\\img\\bateria2.png')
        x = new_df['Hora[UTC]'].tolist()
        y = new_df['Bateria'].tolist()

        title = 'Carga/Descarga de la batería día '+str(day)+'/'+str(mes)+'/'+str(anyo)+' de '+str(node)
        plt.title(title)
        plt.xlabel('Hora [UTC]')
        plt.ylabel('Batería')
        #plt.legend((y)(node))

        plt.plot(x,y)
        plt.xticks(x, rotation='vertical')

       plt.savefig('static\\img\\bateria2.png',transparent=True)

        return 1

    else:
        return 0

基本上我正在做的是访问包含信息的 .csv 文件,根据我想要的数据进行过滤。如果生成的新数据框有数据,则创建图表以最终保存它。

非常感谢。

标签: pythondjangomatplotlib

解决方案


plt.clf()在您的 savefig 命令之后,尝试清除当前图形。这应该可以防止您的地块堆叠在一起。


推荐阅读