我正在使用 Matplotlib 绘制赛车赛事的速度/距离数据,例如距离与时间,时间为水平轴,距离为垂直轴。
我的输入是两个向量,一个包含“从事件开始起的秒数”的时间值,另一个包含“到目前为止行驶的距离”。同一个情节中可以有很多运动员,所以我可以对他们进行比较。
问题是,如果我绘制纯时间,我会得到以秒为单位的 X 轴,这读起来不自然:
我可以根据实际日期和时间绘制数据,并且得到可读的结果,但这是绝对时间,而不是自事件开始以来经过的时间(该事件在上午 6:00 左右开始):
我想要的是一种以 HMS 格式获取经过时间的方法(与第二个图形相同,但与事件开始相关的时间),并且可能具有缩放级别的“意识”(切换到小时:分钟,然后切换到天:缩放级别更改时的小时,以免标签与与比例无关的数据靠得太近)。
谢谢你的帮助!
我怀疑最简单的方法是自己编写Formatter
(doc http://matplotlib.org/api/ticker_api.html#tick-formatting) 进行到 HMS 的转换。
import matplotlib
class myFormatter(matplotlib.ticker.Formatter):
def __call__(self,in_value_in_seconds,pos=None):
hours = int(in_value_in_seconds//(3600))
in_value_in_seconds -= hours * 3600
mins = int(in_value_in_seconds//(60))
in_value_in_seconds -= mins * 60
secs = int(in_value_in_seconds)
return str(hours) + ":" + str(mins) + ":" + str(secs)
这是(我认为)最简单的情况,不支持任何缩放。最好将其中一些逻辑放入datetime.deltatime
对象(或将它们作为参数)。
结合MultipleLocator
(doc http://matplotlib.org/api/ticker_api.html#matplotlib.ticker.MultipleLocator)您可以很好地控制蜱虫的位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)