У меня есть скомпилированный фрейм данных, который содержит данные о потоке USGS на нескольких разных потоковых данных. Теперь я хочу создать диаграмму Ганта, похожую на this . В настоящее время мои данные имеют столбцы в качестве имен сайтов и индекс даты в виде строк.
Вот пример моих данных .
Проблема с примером диаграммы Ганта, которую я связал, состоит в том, что в моих данных есть промежутки между начальной и конечной датами, которые обычно определить горизонтальные временные линии. Многие из найденных мною примеров учитывают только дату начала и окончания, но не пропускают значения, которые могут быть между. Как я могу учесть пробелы, в которых нет данных (пробелов или нанограмм в этих слотах для значений) для некоторых сайтов?
Во-первых, у меня есть график, показывающий, где находятся отсутствующие данные.
import missingno as msno
msno.bar(dfp)
Теперь мне нужно время на оси x и горизонтальная линия на оси y, которая отслеживает, когда сайты содержат данные в те времена. Я знаю, как сделать это методом грубой силы, что будет означать ручное выделение даты начала и окончания, когда есть действительные данные (которые я составил ниже).
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dt
df=[('RIO GRANDE AT EMBUDO, NM','2015-7-22','2015-12-7'),
('RIO GRANDE AT EMBUDO, NM','2016-1-22','2016-8-5'),
('RIO GRANDE DEL RANCHO NEAR TALPA, NM','2014-12-10','2015-12-14'),
('RIO GRANDE DEL RANCHO NEAR TALPA, NM','2017-1-10','2017-11-25'),
('RIO GRANDE AT OTOWI BRIDGE, NM','2015-8-17','2017-8-21'),
('RIO GRANDE BLW TAOS JUNCTION BRIDGE NEAR TAOS, NM','2015-9-1','2016-6-1'),
('RIO GRANDE NEAR CERRO, NM','2016-1-2','2016-3-15'),
]
df=pd.DataFrame(data=df)
df.columns = ['A', 'Beg', 'End']
df['Beg'] = pd.to_datetime(df['Beg'])
df['End'] = pd.to_datetime(df['End'])
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111)
ax = ax.xaxis_date()
ax = plt.hlines(df['A'], dt.date2num(df['Beg']), dt.date2num(df['End']))
Как мне сделать фигуру (как показано выше) с кадром данных, который я привел в качестве примера? В идеале я хочу избегать метода грубой силы.
Обратите внимание: нулевые значения считаются действительными точками данных.
Заранее благодарю за отзыв!