Постройте многострочный график на основе диапазонов дат (мин. И макс.) - PullRequest
0 голосов
/ 24 января 2020

У меня есть df вроде следующего:

   DATE_MIN DATE_MAX
214 1994-06-29  2010-07-12
125 1969-10-26  2011-10-10
123 2013-07-02  2015-01-29
74  2006-01-05  2016-06-20

Столбцы: DATE_MIN, DATE_MAX

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

  • С диапазоном дат по оси x
  • С индексом по оси y, следовательно, каждая линия горизонтальна, они не пересекают друг друга.

Итак, я хочу показать, какие строки имеют некоторое перекрытие по времени, потому что линии будут иметь перекрывающуюся область (не пересекающуюся).

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Спасибо за супер быстрые ответы до сих пор. Я действительно нашел хорошее решение для меня здесь

Мой код выглядит следующим образом:

import matplotlib.pyplot as plt
import matplotlib.dates as dt

df = df.sort_values(by=['DATE_MIN', 'DATE_MAX'])
fig = plt.figure(figsize=(10, 50))
ax = fig.add_subplot(111)
ax = ax.xaxis_date()
ax = plt.hlines(df.ID, 
                dt.date2num(df.DATE_MIN), 
                dt.date2num(df.DATE_MAX))
0 голосов
/ 24 января 2020

Если вы счастливы сделать Гант и использовать заговор, вы можете использовать это до c

import pandas as pd
from io import StringIO
import plotly.figure_factory as ff

txt="""TASK  DATE_MIN DATE_MAX
214 1994-06-29  2010-07-12
125 1969-10-26  2011-10-10
123 2013-07-02  2015-01-29
74  2006-01-05  2016-06-20
"""

df = pd.read_csv(StringIO(txt), delim_whitespace=True)

data = []
for i,row in df.iterrows():
    data.append(dict(Task=str(row["TASK"]),
                     Start=str(row["DATE_MIN"]),
                     Finish=str(row["DATE_MAX"])))

fig = ff.create_gantt(data)
fig.show()

enter image description here

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