matplotlib + wxpython неправильно определил размеры с легендой

У меня есть фигура matplotlib, встроенная в фрейм wxpython с несколькими размерами. Все работает нормально, пока я не добавлю легенду, но тогда, похоже, классификаторы не работают с легендой.

Даже когда я изменяю размер окна, перетаскивая его в угол, главная фигура меняет размер, но отображается только край легенды.

То есть обратите внимание, что легенда не видна в wxFrame.

import wx
import matplotlib as mpl
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as Canvas
from random import shuffle  

class PlotFrame(wx.Frame):

    def __init__(self):     

        wx.Frame.__init__(self, None, -1, title="Plot", size=(-1, -1))
        self.main_panel = wx.Panel(self, -1)
        self.plot_panel = PlotPanel(self.main_panel)

        s0 = wx.BoxSizer(wx.VERTICAL)
        s0.Add(self.main_panel, 1, wx.EXPAND)
        self.SetSizer(s0)
        self.s0 = s0

        self.main_sizer = wx.BoxSizer(wx.VERTICAL)        
        self.main_sizer.Add(self.plot_panel, 1, wx.EXPAND)        
        self.main_panel.SetSizer(self.main_sizer)       

class PlotPanel(wx.Panel):

    def __init__(self, parent, id = -1, dpi = None, **kwargs):
        wx.Panel.__init__(self, parent, id=id, **kwargs)
        self.figure = mpl.figure.Figure(dpi=dpi, figsize=(2,2))
        self.canvas = Canvas(self, -1, self.figure)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.canvas,1,wx.EXPAND)
        self.SetSizer(sizer)
        sizer.SetMinSize((600, 500))
        self.sizer = sizer

def test(plot_panel):
    axes = plot_panel.figure.gca()
    for c in ['r', 'b', 'k']:
        vals = [20, 30, 40, 50, 80, 20, 50, 60, 70, 70, 80]
        shuffle(vals)
        axes.plot(range(len(vals)), vals, "-o", color=c, label=c*10)
    legend = axes.legend(loc='center left', bbox_to_anchor=(1.05, 0.5))
    return legend

if __name__=="__main__":
    app = wx.PySimpleApp()
    frame = PlotFrame()
    legend = test(frame.plot_panel)
    frame.Fit()
    print "legend frame pre show: ", legend.get_frame()
    frame.Show(True)
    print "legend frame post show:", legend.get_frame()
    frame.Fit()
    app.MainLoop()

Редактировать:
Чтобы решение было полезным для меня, я хотел бы, чтобы оно выглядело хорошо, когда фигура автоматически рисуется программой, чтобы параметры настройки могли быть жестко заданы в программе или, например, в событии изменения размера окна, но не корректируется вручную для каждого сюжета. Основные вещи, которые я ожидаю изменить здесь:1) длины меток (скажем, от 1 до 25 символов),2) размер окна (обычно пользователь перетаскивает за угол, и3) количество точек и линий. (Кроме того, если это имеет значение, в конце концов, я хочу, чтобы даты были на нижней оси.)

Я поместил легенду вне осей, чтобы она не охватывала какие-либо точки данных, и я бы предпочел, чтобы она оставалась справа от осей.

Я использую Python 2.6.6, wxPython 2.8.12.1 и matplotlib 1.1.0, и я застрял с ними на данный момент.

Ответы на вопрос(1)

Ваш ответ на вопрос