Сгруппированное представление диаграммы Ганта с легендой, отличной от используемого цвета (python)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сгруппированное представление диаграммы Ганта с легендой, отличной от используемого цвета (python)

Сообщение Anonymous »

Здесь необходимо участие сообщества, чтобы с помощью графика получить представление Ганта, подобное следующему.
Фрейм данных выглядит следующим образом, где подпроект представляет собой уникальный код:
project start end phase decision subproject
1 02-2017 03-2018 Phase_1 09-2023 a1
1 08-2017 07-2019 Phase_1,2 09-2023 a2
1 02-2018 11-2021 Phase_2 09-2023 a3
1 04-2021 02-2023 Phase_3 06-2022 a4
2 01-2019 02-2022 Phase_1 06-2022 b1
2 06-2019 07-2022 Phase_2 06-2022 b2
2 01-2021 03-2023 Phase_2,3 06-2022 b3
2 03-2022 02-2021 Phase_3 06-2022 b4
3 11-2017 02-2019 Phase_1 06-2022 c1
3 01-2018 06-2019 Phase_2 06-2022 c2
3 02-2018 07-2020 Phase_2 06-2022 c3
3 02-2019 06-2021 Phase_2,3 03-2023 c4
4 10-2019 10-2019 Phase_2 03-2023 d1
4 06-2019 08-2020 Phase_3 03-2023 d2
4 02-2020 02-2021 Phase_3 03-2023 d3

Я пытаюсь создать раскраску путем итерации по каждому столбцу.
Моя главная цель — чтобы все столбцы в проекте были объединены в группы и не накладывались друг на друга, поэтому я использую код подпроекта. , но мне нужна другая легенда и цвет в зависимости от столбца фазы.
Изображение

Мой (неудачный) код:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import plotly.express as px

n_colors = 20 # Number of colors in each gradient
blue_orange_cmap = mcolors.LinearSegmentedColormap.from_list("blue_orange", ["blue", "orange"])
orange_green_cmap = mcolors.LinearSegmentedColormap.from_list("orange_green", ["orange", "green"])

blue_orange_colors = [blue_orange_cmap(i/n_colors) for i in range(n_colors)]
orange_green_colors = [orange_green_cmap(i/n_colors) for i in range(n_colors)]

colors = {'Phase_1' : 'blue',
'Phase_2' : 'orange',
'Phase_3' : 'green',
'Phase_1,2' : blue_orange_colors,
'Phase_2,3' : orange_green_colors}

for dat in fig.data:
try:
ix = example_df.index[example_df['subproject']==dat.name]
phase = example_df.loc[ix, 'phase'].values[0]
color = colors[phase]
dat.marker.color = color
dat.name = phase
except:
pass

fig = px.timeline(example_df, x_start='start', x_end='end', y='project', color = 'subproject')

fig.update_layout(xaxis_title='timeline', yaxis_title='projects', showlegend=True, barmode='group', title = "Example", width=1000, height=500)

fig.update_layout(legend=dict(title_text='', traceorder='reversed', itemsizing='constant'))

fig.show()


Подробнее здесь: https://stackoverflow.com/questions/791 ... sed-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»