使用matplotlib,如何在交互式绘图的右下角看到日期值的光标的确切值?
这似乎与刻度分辨率有关:
下面的代码示例具有不同的刻度分辨率。因此,在屏幕截图的右下角,光标值一次为2020
,一次为2020-09
。
我想将其设为2020-09-01
-以便数据具有这种分辨率/粒度。
import datetime
import pandas as pd
import matplotlib
min_date = datetime.datetime.now().date()
max_date = min_date + datetime.timedelta(days=2*365)
date_range = [min_date + datetime.timedelta(days=x)
for x in range(0, (max_date - min_date).days)]
df = pd.DataFrame(date_range)
yRange = range(df.shape[0])
df["y"] = yRange
df.columns = ["x","y"]
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
plt.plot(df["x"], df["y"], "-o", markersize=2)
plt.show()
axes = plt.gca()
import matplotlib.ticker as ticker
tick_spacing = 50
axes.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.rcParams["figure.dpi"] = 200
plt.xticks(rotation=20)
plt.grid()
plt.plot(df["x"], df["y"], "-o", markersize=2)
plt.show()
答案 0 :(得分:1)
为了格式化日期时间轴的x坐标与使用轴上的实际格式不同,可以将Axes.fmt_xdata
属性设置为可调用的可调用对象,该可调用对象将位置放在其中并输出所需的字符串。
在这种情况下,
ax.fmt_xdata = lambda x: matplotlib.dates.num2date(x).strftime("%Y-%m-%d")
示例:
from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
plt.plot([datetime.now(), datetime(2020,6,6)], [1,2], "-o")
plt.gca().fmt_xdata = lambda x: mdates.num2date(x).strftime("%Y-%m-%d")
plt.show()