def __init__(self, N_onscreen=700,*args, **kwargs):
ui.View.__init__(self,*args,**kwargs)
# ready lock is used to protect calls to matplotlib
self.ready=threading.Lock()
#set up zoomable sliders
self.hslider=ZoomSlider(frame=(self.width*0.08,0,self.width*0.84,self.height*0.08),vert=0,flex='wt')
self.vslider=ZoomSlider(frame=(0,self.height*0.08,self.width*0.08,self.height*0.84),vert=1,flex='hr')
self.add_subview(self.hslider)
self.add_subview(self.vslider)
self.hslider.barvalue=0.125
self.hslider.barwidth=0.25
self.vslider.barvalue=0.5
self.vslider.barwidth=1.0
self.hslider.action=self.did_slide
self.vslider.action=self.did_slide
#matplotlib image output
self.img_view = ui.ImageView(frame=[self.width*0.08,self.height*0.08,self.width*0.84,self.height*0.84],flex='WH',bg_color=(1,1,1))
self.add_subview(self.img_view)
# image buffer
self.b = io.BytesIO()
#store base xlim and ylim, only update when drag ends
self.xlim=plt.xlim()
self.ylim=plt.ylim()
self.N_onscreen=N_onscreen # number of points onscreen
# fast and slow dpi.. set low_dpi to lower number for snappier response
self.high_dpi=92
self.low_dpi=16.
self.device_dpi=72
# set output image size to match view size. this probably should be modified to use actual device dpi and size. fonts and line width are based on pts, not pixels
plt.gcf().set_size_inches(self.img_view.width/self.device_dpi,self.img_view.height/self.device_dpi)
#update plot, ensuring update really happens
#self.update_plt(dpi=self.high_dpi, waitForLock=True)
#ObjCInstance(self).becomeFirstResponder()
评论列表
文章目录