Как изменить строку легенды и цвета, чтобы каждая строка в Dataframe отображалась отдельно?(В соответствии с index_col) - PullRequest
0 голосов
/ 22 марта 2019

Как изменить строку легенды и цвета, чтобы каждая строка в Dataframe отображалась отдельно?Мой текущий график выглядит следующим образом:

This is a production schedule. Each row in Dataframe is a job.

Код ниже:

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)

' Радуга ' - это стандартная цветовая шкала по умолчанию,Однако, если я не ошибаюсь, он ограничен двумя цветами.

Я просто хочу, чтобы на диаграмме была легенда, похожая на эту (будь то точки или линии, но не полоса градиента, кактекущий Гант):

This is from the Plotly Gantt Chart documentation.

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

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 .Я хочу, чтобы цвета могли генерироваться самостоятельно при поступлении новой строки из кадра данных.

TLDR;нужен COLORSCALE, который сможет вместить растущее число строк в Dataframe и изменить градиентную полосу на линии / точки / что угодно, чтобы она служила LEGENDS для каждой строки Dataframe согласно index_col.

1 Ответ

0 голосов
/ 24 марта 2019

Попробуйте это

Измените Resource на строку, прежде чем передать ее 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)
...