我正在使用MatplotLib绘制时间序列。时间序列值x轴的分辨率为'%d/%m/%y %H:%M'
,但鼠标中仅显示月份和年份。
我的问题是如何覆盖默认设置并设置鼠标悬停期间应显示的日期时间项?
我的偏好是至少显示day, month, and year
............................................... ......................
正如您所见,(LHS底部角落)x值给出的日期仅显示月份和年份。
答案 0 :(得分:4)
鼠标悬停时显示的值由ax.format_coord
方法控制,该方法在需要自定义时由用户提供的方法进行猴子修补。
例如:
import matplotlib.pyplot as plt
def formatter(x, y):
return '{:0.0f} rainbows, {:0.0f} unicorns'.format(10*x, 10*y)
fig, ax = plt.subplots()
ax.format_coord = formatter
plt.show()
默认ax.format_xdata
调用还有ax.format_ydata
和ax.format_coord
,以便更轻松地自定义x或y组件。
例如:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.format_xdata = '{:0.1f}meters'.format
plt.show()
请注意,我传入了字符串的format
方法,但它可以很容易地成为lambda
或任何需要单个数字参数的任意方法。
默认情况下,format_xdata
和format_ydata
使用轴的主刻度格式化程序,这就是为什么您获得日期轴的日级分辨率。
但是,您还需要将matplotlib的内部数字日期格式转换回“正确的”datetime
对象。因此,您可以控制格式,类似于以下内容:
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
fig, ax = plt.subplots()
ax.xaxis_date()
ax.set_xlim(dt.datetime(2015, 1, 1), dt.datetime(2015, 6, 1))
ax.format_xdata = lambda d: mdates.num2date(d).strftime('%d/%m/%y %H:%M')
plt.show()