gpt4 book ai didi

python - Matplotlib 加上 NetworkX 在循环多个文件时生成重叠图

转载 作者:行者123 更新时间:2023-12-01 08:56:20 26 4
gpt4 key购买 nike

我有一个脚本,应该循环遍历一系列 csv 文件以创建不同的有向图。当使用 matplotlib (plt.savefig()) 保存时,随着循环的进行,图表似乎会被保存在另一个图表之上。如果我使用 plt.show() ,这需要我手动关闭每个循环的文件,则不会发生这种情况。如果我通过调试器执行同样的操作。谁能给我关于可能发生的事情的任何建议?

"""Script to read in CSV file with relations (after having processed with weighting),
and then make a tree hierarchy of relations
"""
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
import os


#create graph
def panda_tree():
path = './CONLL_test/weighted/weighted_out/'
filelist = os.listdir(path)
i = 1
# read in files as dataframe and change to lists
for file in filelist:
if file.endswith('csv'):
parent_child_rel = pd.read_csv(path+file)
parents = parent_child_rel['parent']
children = parent_child_rel['child']

# change lists to tuples
relations = pd.DataFrame({'from': parents, 'to': children})
print(relations)

# Build your graph
graph_name = 'G%s' %i
graph_name=nx.from_pandas_edgelist(relations, 'from', 'to', create_using=nx.DiGraph())

# Plot it
nx.draw(graph_name, with_labels=True)
filename = os.path.splitext(file)
(f, ext) = filename
plt.savefig(path+'directed/'+f+'_dirgraph.png')
i+=1

def main():
panda_tree()


if __name__ == '__main__':
main ()

这些文件是包含越来越少数据的数据帧,因为我仅包含超过 10 个、20 个等最多 100 个点击的数据。100 个图表是最繁忙的一个,当我单独运行它时,我不会包含这些数据。没有这个问题。有没有其他人遇到过这个问题,或者有人可以给我一个如何克服这个问题的提示吗?数据是父子关系(对)。

最佳答案

问题是您没有清除 fig这是由 pyplot 创建的全局对象。这意味着每次循环时都会添加更多数据(“图表似乎是相互保存的”)。

为了避免这种情况,您可以调用 plt.clf()plt.close()调用 plt.save_fig() 后.

如果您要创建很多图形,您绝对应该更喜欢 plt.close() ,自 plt.clf()不释放每个图形使用的内存。

关于python - Matplotlib 加上 NetworkX 在循环多个文件时生成重叠图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52749143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com