2015-04-06 163 views
0

我正在努力解决如何放大整个图形,而不仅仅是图中的子图。以下代码是稍作修改的matplotlib示例,并显示可以手动调整子图轴的限制。同样,盒子缩放仅允许放大子图(或相关的子图)。如何放大整个数字?Matplotlib放大整个图

from matplotlib.pyplot import figure, show 
import numpy 
figsrc = figure() 

axsrc = figsrc.add_subplot(121, xlim=(0,1), ylim=(0,1), autoscale_on=False) 
axzoom = figsrc.add_subplot(122, xlim=(0.45,0.55), ylim=(0.4,.6), 
               autoscale_on=False) 
axsrc.set_title('Click to zoom') 
axzoom.set_title('zoom window') 
x,y,s,c = numpy.random.rand(4,200) 
s *= 200 

axsrc.scatter(x,y,s,c) 
axzoom.scatter(x,y,s,c) 

def onpress(event): 
    if event.button!=1: return 
    x,y = event.xdata, event.ydata 
    axzoom.set_xlim(x-0.1, x+0.1) 
    axzoom.set_ylim(y-0.1, y+0.1) 
    figsrc.canvas.draw() 

figsrc.canvas.mpl_connect('button_press_event', onpress) 
show() 
+0

究竟你的意思“放大整个数字'?只要把窗户变大一点? – tacaswell

+0

窗口大小为400x400,图形大小为300x300,子图大小为100x200。将窗口保持在400x400,将图形大小更改为500x500(即,如果不适合窗口,则切断)并相应地缩放子图大小。现在我想我会看到如何做到这一点 - 根据需要设置图形大小;-) –

+0

通过设计,艺术家定位的最顶层是在“图形分数”中完成的,大多数默认GUI嵌入将图形大小匹配以匹配窗口大小。如果你已经整理出来了,请回答你自己的问题。 – tacaswell

回答

0

一种方法是使用canvas.resize resize方法。

请注意,主页按钮不会恢复原始视图。我一直无法进一步追踪toolbar.home()方法,而不是QtCore.Qt.Key_Home参考:在backend_qt5.py“家”:

from matplotlib.pyplot import figure, show 
import numpy 
figsrc = figure() 

axsrc = figsrc.add_subplot(121, xlim=(0,1), ylim=(0,1), autoscale_on=False) 
axzoom = figsrc.add_subplot(122, xlim=(0.45,0.55), ylim=(0.4,.6), 
               autoscale_on=False) 
axsrc.set_title('LMB to zoom in, RMB to zoom out') 
axzoom.set_title('zoom window') 
x,y,s,c = numpy.random.rand(4,200) 
s *= 200 

axsrc.scatter(x,y,s,c) 
axzoom.scatter(x,y,s,c) 

def onpress(event): 
    if event.button==1: 
     zoomIn() 
    elif event.button==3: 
     zoomOut() 

def zoomIn(): 
    aw, ah = figsrc.canvas.get_width_height() 
    aw *= 1.2 
    ah *= 1.2 
    figsrc.canvas.resize(aw, ah) 
    figsrc.canvas.draw() 

def zoomOut(): 
    aw, ah = figsrc.canvas.get_width_height() 
    if (aw !=0) and (ah != 0): 
     aw /= 1.2 
     ah /= 1.2 
     figsrc.canvas.resize(aw, ah) 
     figsrc.canvas.draw() 


figsrc.canvas.mpl_connect('button_press_event', onpress) 
show()