Хотя есть функция plot_date
для работы на datetime.timedelta
, в вашем случае вы не можете использовать эту функцию в 3D. Вместо этого вы можете создать массив int / float для представления этих данных, преобразовав даты в числа, используя matplotlib.dates.date2num()
. Затем вы можете установить метки в любом формате, который вы хотите. Я использовал значение по умолчанию timedelta
ниже.
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.dates as dates
fig = plt.figure()
ax = fig.gca(projection = '3d')
x = np.zeros((2, 24), dtype = 'datetime64[h]')
x[0, : ] = np.arange('2020-02-27', '2020-02-28', dtype = 'datetime64[h]')
x[1, : ] = np.arange('2020-02-28', '2020-02-29', dtype = 'datetime64[h]')
# convert the datetime to num
xt = [[dates.date2num(d) for d in xi] for xi in x]
y = np.zeros((2, 24), dtype = 'datetime64[D]')
y[0, : ] = np.array(['2020-02-27' for i in range(24)])
y[1, : ] = np.array(['2020-02-28' for i in range(24)])
# convert the datetime to num
yt = [[dates.date2num(d) for d in yi] for yi in y]
z = np.zeros((2, 24))
z[0, : ] = np.arange(24)
z[1, : ] = np.arange(24)
surf = ax.plot_surface(xt, yt, z)
# set x labels as diff in hours
ax.set_xticklabels(x[0]-min(x[0]))
# set y labels as the two dates
ax.set_yticklabels([y[0][0],'','','','',y[1][0]])
plt.show()
Результат как ниже.