У меня есть несколько фреймов данных, которые представляют активность пользователя в приложении переднего плана. Я пытаюсь отобразить эти действия на одном графике для каждого пользователя, где каждый вид деятельности находится на отдельной строке. Цель состоит в том, чтобы иметь хороший продольный вид активности пользователя. Я создаю подплот для каждого пользователя, а затем вызываю 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](https://i.stack.imgur.com/YeaJx.png)
Для справки я добавил несколько операторов печати в код, который выдает следующий вывод:
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](https://i.stack.imgur.com/swqng.png)
И с меньшим количеством примеров, чтобы показать, что это не число пользователей (подзаговоров), вызывающих проблемы: ![enter image description here](https://i.stack.imgur.com/9xJH1.png)
Я также рерансировал это только с одним графиком, чтобы убедиться, что он не был вызван несколькими участками.
Если присмотреться немного, проблема всегда возникает в первом месяце. Все даты находятся на одинаковом расстоянии друг от друга, за исключением первого.
Я разместил «минимальный» набор данных и пример кода на https://gist.github.com/mdbecker/727a362ff573a459c5d7a66dfc46836e, который можно использовать для воспроизведения этой проблемы. .
ОБНОВЛЕНИЕ 2 : Обновление matplotlib до 3.1.1 (с 3.0.2) исправило эту ошибку.