如何在wx.notebook中调整多个画布的大小,浮点大小和重叠问题(WxPython,Matplotlib)

我正在尝试制作一个wx.Notebook,每页上都有一个FigureCanvas,并且这些画布中有唯一的图形/轴。问题是,如果图形大小(通过fig.set_size_inches)为浮点数至2个或更多小数位,则不同页面上图形将彼此稍微重叠我一生无法理解为什么会发生这种情况以及如何解决它。

要查看重叠问题,您必须更改为选项卡2,然后再返回至选项卡1,并且重叠显示在第一个图形的底部。

我在说什么的图片

import wx

# Import Matplotlib
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas

class MyFrame ( wx.Frame ):

    def __init__( self, parent ):

        # FORM BUILDER OUTPUT
        #########################
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 600,500 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

        bSizer9 = wx.BoxSizer( wx.VERTICAL )

        self.m_notebook2 = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_panel5 = wx.Panel( self.m_notebook2, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        bSizer10 = wx.BoxSizer( wx.VERTICAL )

        self.m_panel5.SetSizer( bSizer10 )
        self.m_panel5.Layout()
        bSizer10.Fit( self.m_panel5 )
        self.m_notebook2.AddPage( self.m_panel5, u"Page1", False )
        self.m_panel6 = wx.Panel( self.m_notebook2, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        bSizer11 = wx.BoxSizer( wx.VERTICAL )

        self.m_panel6.SetSizer( bSizer11 )
        self.m_panel6.Layout()
        bSizer11.Fit( self.m_panel6 )
        self.m_notebook2.AddPage( self.m_panel6, u"Page2", False )

        bSizer9.Add( self.m_notebook2, 1, wx.EXPAND |wx.ALL, 5 )

        self.SetSizer( bSizer9 )
        self.Layout()

        self.Centre( wx.BOTH )

        #########################

        graph1 = self.create_graph( self.m_panel5, size=(3, 2.255252) )
        graph2 = self.create_graph( self.m_panel6, size=(5.5556, 3.5) )

        ####################

    def create_canvas( self, panel, size ):
        fig = Figure()
        ax = fig.add_subplot(111)
        ax.set_xlim([0,10])
        ax.set_ylim([0,100])
        ax.axis('off')

        fig.set_size_inches( size )  # If this is a float to 3 decimals is causes problems

        canvas = FigureCanvas(panel, -1, fig)
        sizer = panel.GetSizer()
        sizer.Add(canvas)
        return(canvas)

    def create_graph( self, panel, size ):
        canvas = self.create_canvas(panel,size)
        ax = canvas.figure.axes[0]
        xdata = range(1,10)
        ydata = [x*x for x in xdata]
        ax.scatter( xdata, ydata )
        ax.bar( xdata, [100]*9, 0.5, 0, color='red' )
        ax.plot()
        return(ax)


class MyApp(wx.App):
    def OnInit(self):
        main = MyFrame(None)
        main.Show()
        return True

app = MyApp(0)
app.MainLoop()

print('Done')
nepix32

在Windows(wxPython 2.9.5.1/mpl 1.3.1)上尝试过该代码,并得到了相同的结果(第一幅图底部的红色标记)。

但是,我将以不同的方式解决该问题,并在watPython中而不是在matplotlib中指定图的大小。

如下更改代码时:

def __init__( self, parent ):
    ...
    graph2 = self.create_graph(#...
    self.Layout() # put this at the end

def create_canvas( self, panel, size ): # size can be omitted
    fig = Figure(dpi=96) # specify the dpi instead of the size
    ...
    # comment this out
    # fig.set_size_inches( size )

一切都绘制正确,并且大小更有意义。

编辑:问题出现了如何为mpl画布具有固定的长宽比,而没有特别指定以英寸为单位的大小。您可以使用该wx.SHAPED标志,而不是wx.EXPAND在添加到sizer时写

    bSizer9.Add( self.m_notebook2, 1, wx.SHAPED |wx.ALL, 5 )

这将保持绘制的长宽比__init__

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在wx.grid(wxpython)中将整个行/列设置为只读?

来自分类Dev

如何在wxpython中显示wx.DC的CrossHair?

来自分类Dev

如何在画布上重新绘制以调整大小而不会模糊?

来自分类Dev

如何在iOS中调整UIView的大小?

来自分类Dev

wxPython wx.TextCtrl动态调整大小以填充面板宽度

来自分类Dev

如何禁用wx python小部件中的调整大小?

来自分类Dev

如何在wxPython的wx.StaticText()中具有不同的彩色文本

来自分类Dev

在画布中绘制时如何调整位图的大小?

来自分类Dev

如何在ggplot中控制画布大小?

来自分类Dev

如何在flex容器中调整固定大小(画布)的元素的大小?

来自分类Dev

如何在JavaScript中调整大小和显示图像

来自分类Dev

如何在Wx.Stc.StyledTextCtrl中不允许撤消(Ctrl + Z)

来自分类Dev

如何在Wxpython PseudoDC中的wx.Rect中返回ID

来自分类Dev

如何在Angular中调整KendoGrid的大小(高度和宽度)?(不调整列的大小)

来自分类Dev

如何在画布上移动/调整大小/旋转ContentControl?

来自分类Dev

如何在wx.SpinCtrl中显示数字的前导零?

来自分类Dev

如何在wxpython中显示wx.DC的CrossHair?

来自分类Dev

如何禁用wx python小部件中的调整大小?

来自分类Dev

如何避免在Window中调整手柄重叠的大小

来自分类Dev

如何调整画布大小

来自分类Dev

wxPython在wx.Window中如何使用不同的大小

来自分类Dev

如何在matplotlib和pandas中增加图像大小?

来自分类Dev

如何在WX2中更改队列ID?

来自分类Dev

如何在查询响应中传递和调整大小

来自分类Dev

如何在wxpython中更改wx.TextCtrl小部件的形状?

来自分类Dev

如何在窗口调整大小时重绘画布

来自分类Dev

如何在 Java 中定位和调整 JLabels 的大小?

来自分类Dev

如何在python(Matplotlib)中调整图形的大小

来自分类Dev

如何在我的 C++ 代码中包含 wx (MSVS 2019)

Related 相关文章

  1. 1

    如何在wx.grid(wxpython)中将整个行/列设置为只读?

  2. 2

    如何在wxpython中显示wx.DC的CrossHair?

  3. 3

    如何在画布上重新绘制以调整大小而不会模糊?

  4. 4

    如何在iOS中调整UIView的大小?

  5. 5

    wxPython wx.TextCtrl动态调整大小以填充面板宽度

  6. 6

    如何禁用wx python小部件中的调整大小?

  7. 7

    如何在wxPython的wx.StaticText()中具有不同的彩色文本

  8. 8

    在画布中绘制时如何调整位图的大小?

  9. 9

    如何在ggplot中控制画布大小?

  10. 10

    如何在flex容器中调整固定大小(画布)的元素的大小?

  11. 11

    如何在JavaScript中调整大小和显示图像

  12. 12

    如何在Wx.Stc.StyledTextCtrl中不允许撤消(Ctrl + Z)

  13. 13

    如何在Wxpython PseudoDC中的wx.Rect中返回ID

  14. 14

    如何在Angular中调整KendoGrid的大小(高度和宽度)?(不调整列的大小)

  15. 15

    如何在画布上移动/调整大小/旋转ContentControl?

  16. 16

    如何在wx.SpinCtrl中显示数字的前导零?

  17. 17

    如何在wxpython中显示wx.DC的CrossHair?

  18. 18

    如何禁用wx python小部件中的调整大小?

  19. 19

    如何避免在Window中调整手柄重叠的大小

  20. 20

    如何调整画布大小

  21. 21

    wxPython在wx.Window中如何使用不同的大小

  22. 22

    如何在matplotlib和pandas中增加图像大小?

  23. 23

    如何在WX2中更改队列ID?

  24. 24

    如何在查询响应中传递和调整大小

  25. 25

    如何在wxpython中更改wx.TextCtrl小部件的形状?

  26. 26

    如何在窗口调整大小时重绘画布

  27. 27

    如何在 Java 中定位和调整 JLabels 的大小?

  28. 28

    如何在python(Matplotlib)中调整图形的大小

  29. 29

    如何在我的 C++ 代码中包含 wx (MSVS 2019)

热门标签

归档