У нескольких plot_dates на одной оси неравномерно распределены отметки и сетки - PullRequest
0 голосов
/ 17 января 2020

У меня есть несколько фреймов данных, которые представляют активность пользователя в приложении переднего плана. Я пытаюсь отобразить эти действия на одном графике для каждого пользователя, где каждый вид деятельности находится на отдельной строке. Цель состоит в том, чтобы иметь хороший продольный вид активности пользователя. Я создаю подплот для каждого пользователя, а затем вызываю plot_date для каждого вида деятельности. Проблема, которую я вижу, состоит в том, что на оси абсцисс есть лишние / неуместные галочки и линии сетки. Эта проблема усугубляется, когда я увеличиваю количество вызовов до plot_date (в моем реальном коде 5 разных вызовов). Я пробовал с и без sharex. Я пробовал autofmt_xdate. Я даже пытался явно установить xlim в разных местах. Ничто не может избавиться от лишних галочек / линий сетки. Я уверен, что мог бы это исправить, вручную переопределив тики в самом конце моего кода, но это неправильно. Есть ли лучший способ справиться с этой проблемой? Мне кажется, это сломано.

ncols = 2
len_list = 4
nrows  = int(np.ceil(len_list / ncols))
fig, ax = plt.subplots(figsize=(16,2*nrows), nrows=nrows, ncols=ncols, sharex=True, sharey=True)
for i, user in enumerate(sorted(expected_users)[:4]):
    row = int(i/ncols)
    col = i%ncols
    user_paginations = expected_paginations[expected_paginations['action_by'] == user]
    user_actions = expected_actions[expected_actions['action_by'] == user]
    if not user_actions.empty:
        print('actions', user_actions['date'].min(), user_actions['date'].max())
        ax[row,col].plot_date(user_actions['date'], np.random.uniform(0, 0.5, user_actions.shape[0]) + 0, alpha=0.5, label='action')
    if not user_paginations.empty:
        print('pages', user_paginations['date'].min(), user_paginations['date'].max())
        ax[row,col].plot_date(user_paginations['date'], np.random.uniform(0, 0.5, user_paginations.shape[0]) + 1, alpha=0.5, label='paginate')
plt.tight_layout()
fig.autofmt_xdate()

broken_ticks

Для справки я добавил несколько операторов печати в код, который выдает следующий вывод:

actions 2019-12-20 07:24:39.362000 2020-01-16 11:14:11.776000
pages 2019-12-20 07:33:58.294000 2020-01-16 07:13:17.629000
actions 2020-01-03 11:20:05.271000 2020-01-16 09:25:21.311000
pages 2020-01-14 13:27:02.093000 2020-01-16 09:18:14.726000
actions 2020-01-08 06:55:40.045000 2020-01-08 06:55:40.775000
actions 2020-01-07 10:04:37.674000 2020-01-08 13:53:58.130000
pages 2020-01-07 09:59:29.376000 2020-01-08 13:34:48.712000

РЕДАКТИРОВАТЬ : проблема, которую я пытаюсь выделить, заключается в том, что галочки расположены неравномерно. Это становится более очевидным, когда я добавляю больше точек данных. Я добавил несколько дополнительных примеров, чтобы подчеркнуть эту проблему.

Со всеми 6 типами действий: enter image description here

И с меньшим количеством примеров, чтобы показать, что это не число пользователей (подзаговоров), вызывающих проблемы: enter image description here

Я также рерансировал это только с одним графиком, чтобы убедиться, что он не был вызван несколькими участками.

Если присмотреться немного, проблема всегда возникает в первом месяце. Все даты находятся на одинаковом расстоянии друг от друга, за исключением первого.

Я разместил «минимальный» набор данных и пример кода на https://gist.github.com/mdbecker/727a362ff573a459c5d7a66dfc46836e, который можно использовать для воспроизведения этой проблемы. .

ОБНОВЛЕНИЕ 2 : Обновление matplotlib до 3.1.1 (с 3.0.2) исправило эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...