如何将日期时间的双轴与 imshow 中浮点数/整数的不可见原始轴对齐?

问题描述

我想通过 ax.imshow() 在绘图的 x 轴上将日期时间显示为刻度标签。我首先尝试将限制(作为 datetime 对象)放入范围,但似乎范围只接受 type <float/int> 的参数。因此,我想通过 ax.imshow(...) 创建原始图,然后使 x 轴不可见,然后添加正确的 xticksxlim

我发现使用不同的方法 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)

获得的情节可以在这里看到:

enter image description here

我注意到 xticks 显示在图的顶部而不是底部 - 这是不需要的行为;使用 ax.tick_top (上面注释掉)不会改变这一点。更糟糕的是,不会保留 x 轴限制。我意识到我可以通过 ax.get_xticks()ax.set_xticklabels(...) 手动更改 xticklabels,但我更愿意通过 matplotlib 将其留给日期格式化程序和日期定位器。

我如何使用上面概述的方法来创建日期时间单位的“镜像/替代”x 轴,以便此 x 轴与浮动/的“原始/不可见”x 轴的大小/方向相同整数单位?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)