Как настроить дату и время в Plotly (Python) - PullRequest
1 голос
/ 17 апреля 2020

, поэтому я создал диаграмму Ганта с Da Plotly sh, и я был бы весьма счастлив, если бы не тики оси X.

Вот мой график:

enter image description here

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

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

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

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

Итак, я искал способ сделать это и нашел в Plotly Layout Ссылки (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()

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

enter image description here

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

Я также задавал тот же вопрос в Da sh Community , но пока не получил никакой помощи.

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

1 Ответ

1 голос
/ 17 апреля 2020

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

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

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

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

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

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

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

Хорошее кодирование!

...