如果Transparent为True,Matplotlib Savefig函数会在自身上绘制轴

时间:2013-06-12 14:24:30

标签: matplotlib transparency clear

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

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得到来自前一循环的循环和曲线的曲线叠加。我不知道发生了什么。

With Transparency

Without Transparency

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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)