如何动态更新matplotlib刻度标签

时间:2017-02-13 20:45:16

标签: python matplotlib

我有一个动画图表,可以获取网络使用历史记录,并根据传递的相关数据的大小动态缩放y限制。如何获取y刻度标签以反映y变化的限制?当我设置blit=Flase一切都更新时,一切正常,但是我不希望所有内容都更新每个滴答,只有当y限制改变时,y刻度标签?那么我该如何更新或重绘y刻度标签?

def resize(self, y_data):
    cur_max = max(y_data)
    if cur_max > self.ax.get_ylim()[1]:  # if cur_max > upper y limit..
        self.ax.set_ylim(-1, cur_max + cur_max * .10)  # increase upper y limit to fit cur_max
        ### update/redraw tick labels? ###
    if self.ax.get_ylim()[1] * .25 > cur_max > 0:  # if 1/4 the upper y limit > cur_max and cur_max > 0...
        self.ax.set_ylim(-1, cur_max * .50)  # set upper y limit 1/2 its current size
        ### update/redraw tick labels? ###

1 个答案:

答案 0 :(得分:0)

我猜你需要的是选择一个合适的刻度定位器和/或刻度格式化器:一个函数可以在轴限制发生变化时动态重定位刻度线和标签。

所有文档都可以在这里找到: http://matplotlib.org/api/ticker_api.html

您可以使用预定义的定位器(例如LinearLocator)或按照以下示例定义您自己的定位器:

import matplotlib.pyplot as plt
from matplotlib import ticker
import numpy as np

#- define the data
x = np.linspace(0., 1., 100)
y = np.random.randn(len(x))

#- plot it
ax = plt.gca()
ax.plot(x, y, 'k')

#- define your own locator based on ticker.LinearLocator
class MyLocator(ticker.LinearLocator):
   def tick_values(self, vmin, vmax):
       "vmin and vmax are the axis limits, return the tick locations here"
       return [vmin, 0.5 * (vmin + vmax), vmax]

#- initiate the locator and attach it to the current axis
ML = MyLocator()
ax.yaxis.set_major_locator(ML)

plt.show()
#- now, play with the zoom to see the y-ticks changing