Запустите поиск в вашей среде IDE в источнике. Если вы попытаетесь сделать это на скомпилированных классах, вы бы добавили к ним метод, чтобы поддержать это, даже если вы декомпилировали классы, которые я не думаю, что появятся аннотации или комментарии .
Это, конечно, возможно, но вам нужно перепрыгнуть через несколько обручей.
Во-первых, я собираюсь предположить, что вы имеете в виду календарь, который выглядит как календарь, в отличие от более линейный формат (линейная форматированная «тепловая карта» намного проще, чем это).
Ключ перестраивает вашу серийную 1-мерную серию произвольной длины в 2D-массив Nx7, где каждая строка - неделя, а столбцы - дни. Это достаточно просто, но вам также нужно правильно маркировать месяцы и дни, которые могут получить подробный текст.
Вот пример. Он даже не отдаленно пытается справиться с пересечением границ года (например, с декабря 2014 года по январь 2015 года и т. Д.). Однако, надеюсь, вам будет полезно:
import datetime as dt
import matplotlib.pyplot as plt
import numpy as np
def main():
dates, data = generate_data()
fig, ax = plt.subplots(figsize=(6, 10))
calendar_heatmap(ax, dates, data)
plt.show()
def generate_data():
num = 100
data = np.random.randint(0, 20, num)
start = dt.datetime(2015, 3, 13)
dates = [start + dt.timedelta(days=i) for i in range(num)]
return dates, data
def calendar_array(dates, data):
i, j = zip(*[d.isocalendar()[1:] for d in dates])
i = np.array(i) - min(i)
j = np.array(j) - 1
ni = max(i) + 1
calendar = np.nan * np.zeros((ni, 7))
calendar[i, j] = data
return i, j, calendar
def calendar_heatmap(ax, dates, data):
i, j, calendar = calendar_array(dates, data)
im = ax.imshow(calendar, interpolation='none', cmap='summer')
label_days(ax, dates, i, j, calendar)
label_months(ax, dates, i, j, calendar)
ax.figure.colorbar(im)
def label_days(ax, dates, i, j, calendar):
ni, nj = calendar.shape
day_of_month = np.nan * np.zeros((ni, 7))
day_of_month[i, j] = [d.day for d in dates]
for (i, j), day in np.ndenumerate(day_of_month):
if np.isfinite(day):
ax.text(j, i, int(day), ha='center', va='center')
ax.set(xticks=np.arange(7),
xticklabels=['M', 'T', 'W', 'R', 'F', 'S', 'S'])
ax.xaxis.tick_top()
def label_months(ax, dates, i, j, calendar):
month_labels = np.array(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])
months = np.array([d.month for d in dates])
uniq_months = sorted(set(months))
yticks = [i[months == m].mean() for m in uniq_months]
labels = [month_labels[m - 1] for m in uniq_months]
ax.set(yticks=yticks)
ax.set_yticklabels(labels, rotation=90)
main()
imshow(calendar.T, ...)
) и заменить x & amp; в другом месте. Я отправлю пример позже, но это может быть немного до того, как я успею. – Joe Kington 10 September 2015 в 15:47