我有一个动画图表,可以获取网络使用历史记录,并根据传递的相关数据的大小动态缩放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? ###
答案 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