1

我有一个程序可以处理数据并在多轴图中显示结果。我有许多不同的数字集,我试图将它们生成为报告格式。为了节省内存,我制作了一个图形实例并在每个循环结束时清除。下面是一个表格示例:

import matplotlib.pyplot as plt
import numpy as np

def the_figure():
    #I want a figure that is persistent and accessible
    #So I make the figure an attribute of a function
    the_figure.fig = plt.figure()
    the_figure.axes = dict(
                    t_ax = plt.subplot2grid((6,2),(1,0)),
                    t_fit_ax = plt.subplot2grid((6,2),(1,1)),
                    o_ax = plt.subplot2grid((6,2),(2,0)),
                    o_fit_ax = plt.subplot2grid((6,2),(2,1)),
                    table = plt.subplot2grid((6,2),(3,0), 
                                    rowspan = 3, colspan = 2)
                    )

#A function which makes figures using the single figure function       
def Disp(i=5):
    try:
        the_figure.fig
    except:
        the_figure()

    pi = 3.141592653589793
    axes = the_figure.axes
    xs = np.linspace(-pi/2,pi/2)

    for n in range(i):
        for name,ax in axes.items():
            ax.plot(xs,np.sin(xs*n))

        the_figure.fig.savefig('test_folder\\bad'+str(n),transparent=True)
        the_figure.fig.savefig('test_folder\\good'+str(n),transparent=False)

        #Clear the axes for reuse, supposedly 
        for name,ax in axes.items():
            ax.cla()

完成后,使用透明=True 保存的图形会覆盖其循环中的曲线和前一个循环中的曲线。我不知道是怎么回事。

具有透明度

没有透明度

4

2 回答 2

1
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(1) # This is as persistent as assigning to whatever function
def init_axes(fig):
   fig.clear()
   return dict(
                   t_ax = plt.subplot2grid((6,2),(1,0)),
                   t_fit_ax = plt.subplot2grid((6,2),(1,1)),
                   o_ax = plt.subplot2grid((6,2),(2,0)),
                   o_fit_ax = plt.subplot2grid((6,2),(2,1)),
                   table = plt.subplot2grid((6,2),(3,0), 
                                   rowspan = 3, colspan = 2)
                   )
#A function which makes figures using the single figure       
def Disp(i=5):

   pi = 3.141592653589793
   xs = np.linspace(-pi/2,pi/2)

   for n in range(i):
       axes = init_axes(fig)
       for name,ax in axes.items():
           ax.plot(xs,np.sin(xs*n))

       fig.savefig('bad'+str(n),transparent=True)
       fig.savefig('good'+str(n),transparent=False)
于 2013-06-12T21:30:09.267 回答
0

要清除您正在使用的轴ax.cla(),但您需要发出ax.clear()(或可能plt.axes(ax).cla())。

于 2013-06-12T15:50:46.633 回答