2016-03-16 1 views
0

La méthode que je l'ai utilisé pour tracer les lignes sont comme suit:Python matplotlib conserve la ligne précédente après avoir tracé nouveau

def scatter_plot_with_correlation_line(x, y, graph_filepath): 
    plt.scatter(x, y) 
    axes = plt.gca() 
    m, b = np.polyfit(x, y, 1) 
    X_plot = np.linspace(axes.get_xlim()[0],axes.get_xlim()[1],100) 
    plt.plot(X_plot, m*X_plot + b, '-') 
    plt.savefig(graph_filepath, dpi=300, format='png', bbox_inches='tight') 

La première parcelle semble bien:

enter image description here

Maintenant, dans la deuxième intrigue, la ligne précédente est toujours visible: enter image description here

Depuis que j'utilise t Il scatter_plot_with_correlation_line() dans une boucle les résultats s'aggravent à chaque itération.

L'intrigue suivante est après 10ème itération. Comment puis-je supprimer la ligne précédente tracée à partir des nouveaux?

Répondre

1

Voulez-vous supprimer le nuage de points et la ligne, puis les remplacer tous les deux? le cas échéant, vous pouvez simplement effacer les axes actuels au début de votre fonction à l'aide plt.gca().cla()

def scatter_plot_with_correlation_line(x, y, graph_filepath): 
    plt.gca().cla() 
    plt.scatter(x, y) 
    axes = plt.gca() 
    m, b = np.polyfit(x, y, 1) 
    X_plot = np.linspace(axes.get_xlim()[0],axes.get_xlim()[1],100) 
    plt.plot(X_plot, m*X_plot + b, '-') 
    plt.savefig(graph_filepath, dpi=300, format='png', bbox_inches='tight') 

Si vous voulez seulement supprimer la ligne, et conserver les points de dispersion précédemment tracés, vous pouvez saisir une référence à la line2D objet que vous tracez, puis retirez plus tard:

def scatter_plot_with_correlation_line(x, y, graph_filepath): 
    plt.scatter(x, y) 
    axes = plt.gca() 
    m, b = np.polyfit(x, y, 1) 
    X_plot = np.linspace(axes.get_xlim()[0],axes.get_xlim()[1],100) 

    # Store reference to correlation line. note the comma after corr_line 
    corr_line, = plt.plot(X_plot, m*X_plot + b, '-') 
    plt.savefig(graph_filepath, dpi=300, format='png', bbox_inches='tight') 

    # remove the correlation line after saving the figure, ready for the next iteration 
    corr_line.remove() 
+0

vous remercie du même résultat beaucoup, plt.gca.cla() fonctionne !!! –

0

Essayez plt.clear() au début ou à la fin de votre fonction.

Si cela ne fonctionne pas correctement: Essayez de séparer le diagramme de dispersion du tracé linéaire et effacez uniquement le tracé linéaire. ;)

+1

plt.clear() ne fonctionnait pas Il a donné –

0

Utilisez une nouvelle figure

def scatter_plot_with_correlation_line(...): 
    ###################### 
    f, ax = plt.subplots() 
    ###################### 
    ax.scatter(...) 
    ax.plot(...) 
    f.savefig(...) 

une autre possibilité Consis ts en effaçant les lignes déjà tracées de votre axe

... 
    axes = plt.gca() 
    axes.lines = [] 
    ...