wxPython не может правильно расположить блок matplotlib

#python-2.7 #user-interface #matplotlib #wxpython

#python-2.7 #пользовательский интерфейс #matplotlib #wxpython

Вопрос:

Я взял код, чтобы нарисовать прямоугольник над формой изображения здесь, и немного изменил его, чтобы соответствовать моим целям. Единственная проблема, с которой я сталкиваюсь, заключается в том, что она не отображается на весь экран, даже несмотря на то, что я делаю fr.ShowFullScreen(True) . Вокруг изображения есть серая область. Отредактированный код приведен ниже (прямоугольная часть не имеет значения).:

 # Use the wxPython backend of matplotlib
import matplotlib       
matplotlib.use('WXAgg')

# Matplotlib elements used to draw the bounding rectangle
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure

# wxPython stuff for the demo
import wx

class RectangleSelectImagePanel(wx.Panel):
    def __init__(self, parent, pathToImage=None):

        # Initialise the parent
        wx.Panel.__init__(self, parent)

        # Intitialise the matplotlib figure
        self.figure = Figure(figsize=(20,15), dpi=80)

        # Create an axes, turn off the labels and add them to the figure
        self.axes = self.figure.add_subplot(1, 1, 1)
        self.axes.set_axis_off() 

        # Add the figure to the wxFigureCanvas
        self.canvas = FigureCanvas(self, -1, self.figure)

        # Sizer to contain the canvas
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.canvas, 0, wx.ALL)
        self.SetSizer(self.sizer)
        self.Fit()

    def setImage(self, pathToImage):
        '''Sets the background image of the canvas'''

        import matplotlib.image as mpimg

        # Load the image into matplotlib
        image = matplotlib.image.imread(pathToImage)
        # left in as anchor for image size
        self.imageSize = image.shape[0:2]
        print self.imageSize
# 
        # Add the image to the figure and redraw the canvas. Also ensure the aspect ratio of the image is retained.
        self.axes.imshow(image, interpolation="quadric", aspect='auto')
        self.canvas.draw()

if __name__ == "__main__":

    # Create an demo application
    app = wx.App()

    # Create a frame and a RectangleSelectorPanel
    fr = wx.Frame(None, title='test')
    panel = RectangleSelectImagePanel(fr)

    # Set the image in the panel
    from matplotlib.cbook import get_sample_data
    imgpath = get_sample_data('logo2.png', asfileobj=False)
    panel.setImage(imgpath)

    # Start the demo app
    fr.ShowFullScreen(True)
    app.MainLoop()
  

Комментарии:

1. Этот вопрос мертв / решен для вас? Если нет, опубликуйте свое решение или попросите его (я думал, что ответ должен быть очевиден сейчас).

Ответ №1:

вероятно, вам нужен subplots_adjust .

 from pylab import *
from matplotlib.cbook import get_sample_data
imgpath = get_sample_data('logo2.png', asfileobj=False)
image = matplotlib.image.imread(imgpath)

imshow(image, aspect='auto')
subplots_adjust(left=0, right=1, top=1, bottom=0, wspace=0, hspace=0)
  

Это приведет к созданию графика без полей вокруг изображения.

Итак, если вы поместите

 self.figure.subplots_adjust(left=0, right=1, top=1, bottom=0, wspace=0, hspace=0)
  

после строки imshow вы получите что-то ближе к тому, что вам нужно.

Тогда вам, вероятно, придется также настроить параметр figsize. для моего дисплея 1920 x 1080 мне понадобится 1920,0 / 80 дюймов на 1080,0 / 80 дюймов, так что (24,13.5)