Python matplotlib在绘制新的一行后保留上一行

时间:2016-03-16 09:52:01

标签: python matplotlib plot

我用来绘制线条的方法如下:

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')

第一张情节看起来不错:

enter image description here

现在在第二个图中,前一行仍然可见: enter image description here

由于我在循环中使用scatter_plot_with_correlation_line(),因此每次迭代都会导致结果变得更糟。

以下图是在第10次迭代之后。 enter image description here

如何删除从新照片中绘制的上一行?

3 个答案:

答案 0 :(得分:1)

是否要删除散点图和线条,然后重新绘制它们?如果是这样,您可以使用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')

如果您只想删除该行,并保留以前绘制的散点图,则可以在绘制时抓取对line2D对象的引用,然后将其删除:

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()

答案 1 :(得分:0)

在函数的开头或结尾尝试plt.clear()。

如果它不能正常工作:尝试从线图中分割散点图并仅清除线图。 ;)

答案 2 :(得分:0)

使用新图

git branch --set-upstream-to=origin/rwd-theme

另一种可能性是清除已从轴中绘制的线

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