मेरे पास एक स्क्रिप्ट है जिसे अलग-अलग निर्देशित ग्राफ़ बनाने के लिए सीएसवी फाइलों की श्रृंखला पर लूप करना चाहिए। 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 ग्राफ सबसे व्यस्त है और जब मैं इसे अपने आप चलाता हूं तो मेरे पास यह नहीं होता है संकट। क्या किसी और को कभी यह समस्या हुई है या क्या कोई मुझे संकेत दे सकता है कि इसे कैसे दूर किया जाए? डेटा अभिभावक बाल संबंध (जोड़े) हैं।

1
Sandra Young 11 अक्टूबर 2018, 00:37

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह है कि आप fig को साफ़ नहीं कर रहे थे जो कि pyplot द्वारा बनाई गई एक वैश्विक वस्तु है। इसका मतलब है कि हर बार आपके लूप के आसपास अधिक डेटा जोड़ा जाता है ("ग्राफ एक दूसरे के ऊपर सहेजे जाते हैं")।

इससे बचने के लिए, आप plt.save_fig() पर कॉल करने के बाद या तो plt.clf() या plt.close() पर कॉल कर सकते हैं।

यदि आप बहुत सारे आंकड़े बना रहे हैं, तो आपको निश्चित रूप से plt.close() को प्राथमिकता देनी चाहिए, क्योंकि plt.clf() प्रत्येक आकृति के लिए उपयोग की गई मेमोरी को जारी नहीं करता है।

2
Jamie Bull 15 अक्टूबर 2018, 06:14