嵌入matplotlib图时如何更新轴限制?

时间:2014-04-15 14:35:58

标签: python matplotlib plot pyside embedding

我在PySide应用程序中嵌入了一个matplotlib图。我试图向用户公开一些功能(通过gui按钮等)来帮助他们自定义图形。

我很难在告知时更新x和y轴限制。我有这个功能:

def set_xlimits(self, lower, upper):
    """ Convenience method to canvas.axes.set_xlim """
    self.canvas.axes.set_xlim(lower, upper)
    self.canvas.draw()

其中axesmatplotlib.axes.Axes个实例,而canvas是从FigureCanvasQTAgg继承的

当我调用此方法时,使用新的限制,要么没有任何反应,要么新的刻度线添加到轴上,但没有新的刻度标签(即如果从0,1的限制更改为0,10,它仍将保持标记从0到1,但超过1)的额外刻度

有关如何始终执行更改的任何想法?

编辑: 似乎轴限制已更新,但刻度不是。因此,如果我将限制更改为0-16,则滴答仍将保持0-1,但0-16范围内的所有数据都会显示?!

当我随后调用另一个方法时,例如这个方法来编辑刻度标签字体:

def set_tick_font(self, font):
    self.canvas.axes.set_xticklabels(self.canvas.axes.get_xticks(), **font)
    self.canvas.axes.set_yticklabels(self.canvas.axes.get_yticks(), **font)
    self.canvas.draw()

最后绘制了更新轴限制的上一次调用。这不是理想的 - 它应该是第一次画出来的。有什么想法发生了什么?

1 个答案:

答案 0 :(得分:0)

正如tcaswell暗示的那样,似乎我的第二种方法 - 设置刻度字体,以某种方式阻止了set_xlim和set_ylim方法正常工作。

我仍然需要确切了解其工作原理,但就目前而言,将第二种方法更改为:

def set_tick_font(self, font):
    fnt = font_manager.FontProperties(**font)
    for labelx, labely in zip(self.canvas.axes.get_xticklabels(), self.canvas.axes.get_yticklabels()):
        labelx.set_fontproperties(fnt)
        labely.set_fontproperties(fnt)
    self.canvas.draw()

表示在调用set_xlimits方法时,限制现在可以正确更新,我仍然可以单独更改刻度标签字体。