#python #django #charts #plotly #gantt-chart
#python #django #Диаграммы #наглядно #диаграмма Ганта
Вопрос:
Как я могу изменить панель условных обозначений и цвета, чтобы отображать каждую строку в Dataframe по отдельности? Моя текущая диаграмма выглядит следующим образом:
Код приведен ниже:
def chart(task_list, filename):
fig = ff.create_gantt(task_list, colors='Rainbow', index_col='Resource', show_colorbar=True, group_tasks=True)
# plot(fig, filename=filename)
return plot(fig, filename=filename, include_plotlyjs=False, output_type='div')
#print(fig)
‘Rainbow‘ — это цветовая шкала по умолчанию для построения графика. Однако, если я не ошибаюсь, она ограничена всего двумя цветами.
Я просто хочу, чтобы на диаграмме была легенда, похожая на эту (будь то точки или линии, только не градиентная полоса, подобная текущей Gantt):
Код для этого следующий:
df = [dict(Task="Job A", Start='2016-01-01', Finish='2016-01-02', Resource='Apple'),
dict(Task="Job B", Start='2016-01-02', Finish='2016-01-04', Resource='Grape'),
dict(Task="Job C", Start='2016-01-02', Finish='2016-01-03', Resource='Banana')]
colors = dict(Apple = 'rgb(220, 0, 0)',
Grape = 'rgb(170, 14, 200)',
Banana = (1, 0.9, 0.16))
fig = ff.create_gantt(df, colors=colors, index_col='Resource', show_colorbar=True)
py.iplot(fig, filename='gantt-dictioanry-colors', world_readable=True)
Однако, когда я использую код из документации, он имеет только ограниченное количество цветов, задаваемых dict colors. Я хочу, чтобы цвета могли генерироваться самостоятельно всякий раз, когда из Dataframe поступает новая строка.
TLDR; нужна ЦВЕТОВАЯ ШКАЛА, которая сможет вместить все большее количество строк в Dataframe и изменить градиентную полосу на линии / точки / что угодно, чтобы она служила ЛЕГЕНДАМИ для каждой строки Dataframe в соответствии с index_col.
Ответ №1:
Попробуйте это
Измените Resource
значение на string перед передачей в def chart(task_list, filename)
, чтобы оно plot.ly
принималось Resource
как дискретная категория вместо непрерывной меры.
task_list.Resource = task_list.Resource.apply(str)
import random
all_the_colors = list((x,y,z) for x in range(256) for y in range(256) for z in range(256))
colors = [f"rgb({random.choice(all_the_colors)})" for x in df.Resource.unique()]
def chart(task_list, filename):
fig = ff.create_gantt(task_list, colors=colors, index_col='Resource', show_colorbar=True, group_tasks=True)
# plot(fig, filename=filename)
return plot(fig, filename=filename, include_plotlyjs=False, output_type='div')
#print(fig)
Комментарии:
1. Привет! Он возвращает ошибку, аналогичную той, с которой я сталкивался раньше: Ошибка. Количество цветов в «colors» должно быть не меньше количества уникальных значений индекса в столбце вашей группы.