Matplotlib suptitle印在旧的suptitle上

时间:2013-12-19 10:05:12

标签: python matplotlib

我在ubuntu 13.10 64bit

中使用matplotlib 1.2.1

我有一个创建和保存绘图的函数,我多次调用该函数。然而,在某些情况下,suptitle被绘制在旧的上面,弄得一团糟。 我认为这与以下问题有关,但我无法理解该问题中的答复: Matplotlib suptitle prints over old title

我的代码如下:

# =======================================================================
def plotMultivariable(scenarios_h, variables_h, region, title, filename):

  nvar = len(variables_h)
  nscen = len(scenarios_h)
  plt.figure(1)
  maintitle = unicode(title, 'utf_8')
  plt.suptitle(maintitle, fontsize=16, ha='center')
  for i in range(nvar):    
    plt.subplot(nvar,1,i)
    title = unicode(variables[variables_h[i]][0], 'utf_8')
    ylabel = unicode(variables[variables_h[i]][1], 'utf_8')
    plt.title(title)
    plt.ylabel(ylabel)
    for scenario in scenarios_h:
      for spGroup in spAggregates.keys():
        serieName = unicode(spGroup + " - " + scenario, 'utf_8')
        serieColor = scenarios[scenario]
        serieLineType = spAggregates[spGroup][2]
        serieWidth = spAggregates[spGroup][3]
        key = region, variables_h[i], scenario, spGroup
        y = odata[key]
        plt.plot(x, y, serieLineType, label=serieName, linewidth=serieWidth, color=serieColor)
  plt.subplots_adjust(hspace=0.6)
  plt.savefig(chartoutdir+"/"+filename)
  #plt.show()

我将此函数称为:

plotMultivariable(['reference','vRegEnd075','vRegFixed','vRegFromHr'],['expReturns','vReg','vol','hV'],'11000','Management effect','management.png')
plotMultivariable(['reference','withRisk06','withRisk08','withRisk10'],['expReturns','vReg','vol','hV'],'11000','Risk effect','risk.png')
plotMultivariable(['nonspatial','reference','withVariance'],['expReturns','vReg','vol','hV'],'11000','Spatial explicit simulations','space.png')

以下是结果图。如果我查看它们而不是保存它们就可以了。在引用的答案中有任何提示或帮助理解回复吗?谢谢..

first image (ok) second plot (ok) third plot (title overdrawn)

2 个答案:

答案 0 :(得分:1)

你应该最终关闭你的身材以正确清理一切;只需添加

plt.close()

在你的功能结束时它应该可以工作。

答案 1 :(得分:1)

在你的情况下,可能会扰乱你的是matplotlib是状态感知的(我不知道确切的单词)并且在已经创建的对象的背景中跟踪[即使这是一个bug] ,如链接问题中所述]。正如MBR所回答的那样,关闭情节可以解决您的问题。

另一种方式,正如你所链接的问题所解释的那样,将继续引用所创建的suptitles。然后,当它们表现为Text个对象时,您可以更改它们的特征,尤其是显示的文本。