построить прямоугольник патча диапазона из разных строк в pandas

#python-3.x #pandas #plot

#python-3.x #pandas #построить

Вопрос:

У меня есть фрейм данных pandas, похожий на:

 df = pd.DataFrame([['1/1/2020',0.1,0.3,'cat1','csv'],
                  ['1/1/2020',0.4,0.7,'cat1','excel'],
                  ['1/1/2020',1.7,2.3,'cat2','csv'],
                  ['2/1/2020',0,0.3,'cat2','csv'],
                  ['2/1/2020',0.4,0.5,'cat2','csv'],
                  ['2/1/2020',0.5,0.7,'cat1','csv'],
                  ['2/1/2020',1.1,1.3,'cat1','excel']],
                     columns = ['date','start','end','cat','source'])
  

Каждая строка df содержит диапазон значений, которые должны быть окрашены, и цветовую группу (cat). Я хотел бы отобразить поля на ту же дату в той же строке на графике:

введите описание изображения здесь

Приятно иметь: было бы еще лучше, если бы график был интерактивным таким образом, чтобы он мог отображать всплывающее окно, отображающее информацию о каждом цветовом поле (дополнительная информация, которая не может быть отображена по цвету / расположению графика), например:

 Source: csv
  

Ответ №1:

Давайте попробуем построить один столбец за другим:

 plt.figure(figsize=(10,3))
for i,r in df.iterrows():
    plt.barh(r['date'], width=r['end']-r['start'],
             left=r['start'], color='y' if r['cat']=='cat1' else 'g')
  

Или построить их все вместе с отображением цвета:

 plt.barh(df['date'], width=df['end']-df['start'],
         left=df['start'], color=df['cat'].map({'cat1':'y', 'cat2':'g'}))
  

Вывод:

введите описание изображения здесь

Комментарии:

1. Большое спасибо! Он отлично работает с моими фактическими данными! Могу ли я узнать, есть ли какой-либо способ заставить всплывающее окно также отображать исходную информацию?