Как настроить тики даты и времени в Plotly (Python)
Поэтому я создал диаграмму Ганта с помощью Plotly's Dash, и я был бы вполне счастлив, если бы не тики оси x.
Вот моя диаграмма:
Красиво, но для галочки по оси x. Я бы хотел настроить их под свои нужды:
Я бы хотел, чтобы они начинались в понедельник (04 января), а не в воскресенье (10 января) и продолжали работать по неделям, как они уже делают.
Вместо "04 января" метки должны быть примерно такими: "KW: 01 ('21)". Здесь KW означает календарную неделю.
Я не хочу показывать каждую метку. Было бы неплохо, если бы диаграмма показывала только каждый первый киловатт в году и каждый пятый
Итак, я искал способ сделать это и обнаружил в ссылках на макет 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, вы можете проверить этот пост (без решения) как точку входа для вашего поиска.
Хорошая кодировка!