Как работает сетка фиксации в github? [Дубликат]

Запустите поиск в вашей среде IDE в источнике. Если вы попытаетесь сделать это на скомпилированных классах, вы бы добавили к ним метод, чтобы поддержать это, даже если вы декомпилировали классы, которые я не думаю, что появятся аннотации или комментарии .

5
задан code base 5000 9 September 2015 в 17:32
поделиться

3 ответа

Это, конечно, возможно, но вам нужно перепрыгнуть через несколько обручей.

Во-первых, я собираюсь предположить, что вы имеете в виду календарь, который выглядит как календарь, в отличие от более линейный формат (линейная форматированная «тепловая карта» намного проще, чем это).

Ключ перестраивает вашу серийную 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()

14
ответ дан Joe Kington 15 August 2018 в 19:49
поделиться
  • 1
    Спасибо за этот образец, он работает удивительно хорошо. У меня есть вопрос. Форма формы массива numpy влияет на форму графического объекта, или если бы я хотел, чтобы графическая горизонталь, что бы я изменил? – code base 5000 10 September 2015 в 15:43
  • 2
    Да, форма массива напрямую влияет на форму графика. Чтобы изменить его, вы можете перенести массив (т. Е. imshow(calendar.T, ...)) и заменить x & amp; в другом месте. Я отправлю пример позже, но это может быть немного до того, как я успею. – Joe Kington 10 September 2015 в 15:47
0
ответ дан cbarrick 5 September 2018 в 19:03
поделиться
0
ответ дан korbaga F Woldekidan 5 September 2018 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: