Как настроить тики даты и времени в Plotly (Python)

Поэтому я создал диаграмму Ганта с помощью Plotly's Dash, и я был бы вполне счастлив, если бы не тики оси x.

Вот моя диаграмма:

Красиво, но для галочки по оси x. Я бы хотел настроить их под свои нужды:

  1. Я бы хотел, чтобы они начинались в понедельник (04 января), а не в воскресенье (10 января) и продолжали работать по неделям, как они уже делают.

  2. Вместо "04 января" метки должны быть примерно такими: "KW: 01 ('21)". Здесь KW означает календарную неделю.

  3. Я не хочу показывать каждую метку. Было бы неплохо, если бы диаграмма показывала только каждый первый киловатт в году и каждый пятый

Итак, я искал способ сделать это и обнаружил в ссылках на макет Plotly (xaxis-tickvals), что должен быть простой способ сделать это. Мне просто нужен список тиквалов для местоположений на диаграмме и список тик-текста для меток, и мне нужно установить режим тикания в "массив".

Поскольку мой код слишком длинный, я просто приведу небольшой пример. Скажем, это мой код:

import plotly.figure_factory as ff
import datetime

df = [dict(Task="Job A", Start='2021-01-08', Finish='2021-01-29'),
  dict(Task="Job B", Start='2021-01-15', Finish='2021-02-12'),
  dict(Task="Job C", Start='2021-01-29', Finish='2021-02-19'),
  dict(Task="Job D", Start='2021-02-05', Finish='2021-02-26')]

my_figure = ff.create_gantt(df, showgrid_x=True, showgrid_y=True)
weeks_ticktext = ['KW: 01 (\'21)', '', '', '', 'KW: 05 (\'21)', '', '', '', '']
weeks_tickvals = [datetime.datetime(2021, 1, 4, 0, 0), datetime.datetime(2021, 1, 11, 0, 0),
          datetime.datetime(2021, 1, 18, 0, 0), datetime.datetime(2021, 1, 25, 0, 0),
          datetime.datetime(2021, 2, 1, 0, 0), datetime.datetime(2021, 2, 8, 0, 0),
          datetime.datetime(2021, 2, 15, 0, 0), datetime.datetime(2021, 2, 22, 0, 0),
          datetime.datetime(2021, 3, 1, 0, 0)]
my_figure.layout.xaxis['tickmode'] = 'array'
my_figure.layout.xaxis['tickvals'] = weeks_tickvals
my_figure.layout.xaxis['ticktext'] = weeks_ticktext
my_figure.show()

Затем этот код создаст следующий график:

Теперь я не понимаю, почему ось x не запускалась и не отображалась так, как я хотел.

Я также задал тот же вопрос в сообществе Dash, но пока мне не помогли.

Я благодарен за любой комментарий!

1 ответ

1) Чтобы установить дату начала, вы можете настроить диапазон оси с помощью чего-то вроде

my_figure.layout['xaxis'].update(range=[min, max])

где вам нужно выяснить, как найти минимальные и максимальные значения ваших меток.

2) Как описано здесь, самый простой способ достичь того, что вы ищете, - установить xaxis_tickformat в макете. Попробуйте добавить строку

my_figure.layout['xaxis_tickformat'] = '%d %B whatever <br>%Y'

непосредственно перед последней строкой и поиграйте со строкой формата, как описано и задокументировано здесь

3) Вероятно, вся эта настройка приведет вас к написанию простой функции, которая возвращает списки строк для использования в качестве отметок. Если вы хотите придерживаться объектов datetime, вы можете проверить этот пост (без решения) как точку входа для вашего поиска.

Хорошая кодировка!

Другие вопросы по тегам