问题描述
我想通过 ax.imshow()
在绘图的 x 轴上将日期时间显示为刻度标签。我首先尝试将限制(作为 datetime
对象)放入范围,但似乎范围只接受 type <float/int>
的参数。因此,我想通过 ax.imshow(...)
创建原始图,然后使 x 轴不可见,然后添加正确的 xticks
和 xlim
。
我发现使用不同的方法 in this example 解决了类似的问题,但我认为我的用例略有不同;我不需要转换任何时间戳,但我知道数据的 xlim
(就 datetime
对象而言)。此外,我认为 matplotlib.dates.date2num
的建议用法不适合我的用例,因为某些数据的间隔时间不到一天,但 date2num
使用 days as a base-unit。
我一直在尝试使用我的替代方法来完成这项工作;下面是一个简单的小例子。
import numpy as np
import datetime
import matplotlib.pyplot as plt
from matplotlib.colors import normalize
def f(x,y):
return np.sqrt(np.square(x) + np.square(y))
## SAMPLE DATA
x = np.arange(10) ## elapsed minutes
y = np.square(x) ## arbitrary y-values
X,Y = np.meshgrid(x,y)
Z = f(X,Y)
## DATETIMES FOR ALTERNATE AXIS
lower_dt = datetime.datetime(1999,1,0)
# upper_dt = datetime.datetime(2001,10,31,0)
upper_dt = datetime.datetime(1999,x.size-1,0)
## DO PLOT
fig,ax = plt.subplots()
ax.xaxis.set_visible(False)
# ax.xaxis.tick_top()
ax.imshow(
Z,origin='lower',cmap='Oranges',norm=normalize(vmin=np.nanmin(Z),vmax=np.nanmax(X)),extent=(x[0],x[-1],y[0],y[-1]))
## CONVERT XTICKLABELS OF X-AXIS TO DATETIME
mirror_ax = ax.twiny()
# mirror_ax = ax.figure.add_subplot(ax.get_subplotspec(),frameon=False)
mirror_ax.set_xlim([lower_dt,upper_dt])
plt.show()
plt.close(fig)
获得的情节可以在这里看到:
我注意到 xticks
显示在图的顶部而不是底部 - 这是不需要的行为;使用 ax.tick_top
(上面注释掉)不会改变这一点。更糟糕的是,不会保留 x 轴限制。我意识到我可以通过 ax.get_xticks()
和 ax.set_xticklabels(...)
手动更改 xticklabels,但我更愿意通过 matplotlib 将其留给日期格式化程序和日期定位器。
我如何使用上面概述的方法来创建日期时间单位的“镜像/替代”x 轴,以便此 x 轴与浮动/的“原始/不可见”x 轴的大小/方向相同整数单位?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)