2016-05-17 85 views
0

我希望这可以不必提供一些代码来回答,因为有超过千行,我不知道问题出在哪里。保持恒定刻度标记的间隔滚动MATPLOTLIB图表

基本上,我创建了一个图表类,可以实时滚动和更新数据。有很多功能,如多个Y轴,暂停的能力,增加垂直价值线等等,因此许多LOC。几乎所有的工作都很好。

我通过抓取背景来实现滚动,然后在新数据进入时重置和blitting。我为每条线(对于多个y轴)都有单独的子图,并重置极限并在主子图上调用draw_artist只有fr x和y轴。

的问题是,作为数据滚动,根据当前方面,X轴的刻度可以继续改变他们的每一个新的数据进入的时间间距因此,它可能看起来像:0,2,4,6, 8,10,12在一瞬间然后0,5,10下一个。

+0

我在考虑使用这里描述的解决方案之一: http://stackoverflow.com/questions/12608788/changing-the-tick-frequency-on-x-or-y-axis-in-matplotlib ?rq = 1 答案建议ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing)) –

+0

当您重画时,您可以在所有其他内容中明确设置x轴限制和x轴刻度。 – gboffi

+0

我认为这可能是问题,因为我让MATPLOTLIB自动做到这一点,它似乎计算刻度间隔时使用的不仅仅是更多的范围内。 –

回答

0

好的,我找到了解决办法。当新的数据来自于我叫下面的代码:

if self.tickSpacing is not None: 
    self.MPLsubPlot.xaxis.set_major_locator(ticker.MultipleLocator(self.tickSpacing)) 
else: 
    self.MPLsubPlot.xaxis.set_major_locator(ticker.AutoLocator()) 

self.tickSpacing被初始化为None,设置为无,当用户开始平移/缩放上按下鼠标。在鼠标弹起(一旦平移/缩放完成)以下函数被调用:

def _updateSpacing(self): 
    labels = self.MPLsubPlot.xaxis.get_ticklocs() 
    if len(labels) > 1: 
     self.tickSpacing = labels[1] - labels[0] 

这允许matplotlib自动确定对初始或改变的方面的间距,然后明确地使用对新的数据更新该值。