Python 覆盖来自多个函数调用的matplotlib plot,同时单独打印它们

Python 覆盖来自多个函数调用的matplotlib plot,同时单独打印它们,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,我有一个函数,它使用seaborn的distplot绘制和显示分布。看起来像这样 def getPlot(data): x=sns.distplot(data, hist=False) plt.show() return x 每次调用这个函数,我都会得到一个分布图 我需要一些修改函数的帮助,以便在多次调用函数结束时,我应该得到一个额外的绘图,它是所有先前绘图的组合 如果我的函数调用是 getPlot(data1) getPlot(data2) getPlot(data3

我有一个函数,它使用seaborn的distplot绘制和显示分布。看起来像这样

def getPlot(data):
    x=sns.distplot(data, hist=False)
    plt.show()
    return x
每次调用这个函数,我都会得到一个分布图

我需要一些修改函数的帮助,以便在多次调用函数结束时,我应该得到一个额外的绘图,它是所有先前绘图的组合

如果我的函数调用是

getPlot(data1)
getPlot(data2)
getPlot(data3)
当我调用函数时,我应该得到数据的单独绘图,并且在最后我希望3个数据的绘图相互叠加


仅将
plt.show()
移动到函数外部是不够的,因为我想要单独数据的单独绘图以及包含所有数据的一个图形。

由于必须同时保留单独绘图和数据的联合绘图,因此必须对每个数据集进行两次绘图。一次在单独的轴上,一次在公共轴上

我要做的是创建一个图形和一个轴,所有的东西都将被绘制在一起。然后将该轴对象传递到函数中,并将函数图绘制到轴以及新图形中:

def plot_twice(data, ax_all):
    # first plot into the common axes
    sns.distplot(data, hist=False, ax=ax_all)

    # and create a new figure and axes for a standalone plot
    fig,ax = plt.subplots()
    x = sns.distplot(data, hist=False, ax=ax)
    return x

# create axes for the common plot
fig,ax_all = plt.subplots()

# now plot the things
getPlot(data1, ax_all)
getPlot(data2, ax_all)
getPlot(data3, ax_all)

# only call blocking plt.show() at the end
plt.show()

使用matplotlib将绘图从一个轴复制到另一个轴似乎是不可行的(请参见,例如,or),因此,除非绘图占用过多的时间或内存,否则为了简单起见,我只需将数据打印两次。

您所说的“最后”是什么意思?每次调用
getPlot
都不知道是否会有更多的调用。@Goyo我只想累积绘图。我可以在最后调用
plt.show()
来获得最终的绘图。您已经在
getPlot
中调用了
plt.show()
,并关闭了图形,这样额外的调用就不会显示任何内容。也许您可以编写一个新函数(我们称之为
getAllPlots
),它获取一个数据集列表(或iterble)并叠加绘制其分布,然后在最后调用
getAllPlots([data1,data2,data3])
。这行吗?@AndrasDeak如果我不在函数中调用
plt.show()
,那么我将丢失每个
数据的单独绘图,并且在最后得到所有绘图的组合。但是我想要两者,组合和个人数据。哦,好吧,我完全错过了。那有点难。您仍然必须仅在末尾调用
plt.show()
,但需要单独的数字。最简单的解决方案是在调用任何函数之前,首先创建一个单独的图形和轴,然后将这些轴传递给每个函数,这个函数既可以将数据绘制到该轴上,也可以绘制到一个全新的图形上。我将投票重新打开这个问题,因为它不是重复的。是否可以立即绘制独立的图形?@a_parida调用non blocking
plt.draw()
,或者切换到可能会有所帮助。