Рисование на Python большой разноцветной таблицы или горизонтального графика

Всем привет. Несколько дней гугления и экспериментов не помогли, прошу совета. Есть задача вывода таблицы учета рабочего времени сотрудников. Исходные данные (ФИО, дата, количество отработанных часов, требуемое значение количества часов) тянутся из экселя либо рассчитываются путем нехитрых действий (например требуемое значение количества часов учитывает праздничные дни, сокращенные дни, выходные). На выходе нужна разноцветная таблица/график примерно такого формата: Пример таблицы Ширина таблицы (диапазон дат выборки) может быть очень разным (от нескольких дней до бесконечности, ну до года точно). Конечно за год рисовать такое - будет очень неинформативно, но до месяца будет использоваться точно. Предварительно задачу визуализации общего количества отработанных часов решал с помощью matplotlib.pyplot.barh, и, в целом, всё устраивало. Но для более детализированного и разноцветного отчета он не подходит. Пример графика Посоветуйте инструмент, с помощью которого можно (если можно) реализовать нужное. Спасибо


Ответы (1 шт):

Автор решения: Vasyl Kolomiets

На поименованные цвета можна посмотреть здесь. Каждый бар может быть своего цвета - его просто нужно задать. Осталась небольшая сложность как разметить столбец в зависимости от значения нужным цветом, или поместить в нужную категорию. Решение размещения значений по корзинам есть здесь. Соединяем вместе и вот:

from bisect import bisect

import matplotlib.pyplot as plt
from matplotlib import colors as mcolors

def basket(score,
           breakpoints=[30, 40, 50, 60, 70, 80, 90],
           colours=['red', 'darkorange', 'forestgreen', 'greenyellow', 'gold', 'lavender', 'm']):
    """Assign the basket color depending from value."""
    i = bisect(breakpoints, score)
    return colours[i]


labels = ['Аня', 'Маня', 'Ваня', 'Даня', 'Мишаня', "Андрюха", "Димуха", "HugoBoss"]
values = [25, 35, 45, 55, 65, 75, 89, 40]
colors = [basket(value) for value in values]

# Change the bar colors here
plt.bar(labels, values, color=colors)

plt.ylabel('отработано часов ')
plt.show()

результат:

цвет зависит от значения

Повернуть и навести красоту, думаю, сможете ))
разноцветная таблица называется heatmap. Вот документация. Хотя подумать немного все же придется.

→ Ссылка