我在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()
其中axes
是matplotlib.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()
最后绘制了更新轴限制的上一次调用。这不是理想的 - 它应该是第一次画出来的。有什么想法发生了什么?
答案 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
方法时,限制现在可以正确更新,我仍然可以单独更改刻度标签字体。