Пулевая диаграмма (Bullet Graph) - Лена Капаца
Пулевая диаграмма (Bullet Graph) by Лена Капаца Feb. 14, 2024 Основы

Bullet Graph — это компактный и информативный способ отображения ключевых показателей (KPI) или текущих результатов в сравнении с целевыми показателями или другими референсными значениями. Этот тип визуализации был разработан Стивеном Фью (Stephen Few) как альтернатива традиционным термометрам и линейным графикам прогресса, предоставляя одновременно информацию о текущем достижении, сравнительном контексте (например, целевых или прошлых значениях) и квалификаторах эффективности (как правило, отображаемых через разные оттенки или цвета).

Bullet Graph состоит из нескольких основных компонентов:
- Основная мера (обычно текущий показатель или KPI),
- Сравнительная мера (например, целевое значение),
- Качественные диапазоны (различные уровни производительности, отображаемые цветами или оттенками).

В следующем примере мы создадим простой Bullet Graph, который отображает текущее значение, цель и три качественных диапазона производительности.

Для начала импортируем необходимые библиотеки:


import matplotlib.pyplot as plt
import numpy as np

 

Создадим функцию отрисовки графика:

 

def draw_bullet_graph(current_value, target, ranges, labels=None, figsize=(8, 3)):
    fig, ax = plt.subplots(figsize=figsize)
    
    # Качественные диапазоны
    for i, range_val in enumerate(ranges):
        ax.broken_barh([(0, range_val)], (i, 0.5), facecolors=('red', 'yellow', 'green')[i])
    
    # Текущее значение
    ax.broken_barh([(0, current_value)], (len(ranges), 0.5), facecolors='blue')
    
    # Целевое значение
    ax.plot([target, target], [0, len(ranges)], 'k--', linewidth=2)
    
    ax.set_yticks(np.arange(len(ranges) + 1) + 0.25)
    if labels:
        ax.set_yticklabels(labels + ['Current'])
    ax.set_xticks([])
    ax.set_xlim(0, max(ranges + [current_value, target]) * 1.1)
    
    plt.show()

 

Создадим игрушечные данные:


current_value = 75
target = 90
ranges = [50, 75, 100]  # Например, плохо, удовлетворительно, хорошо
labels = ['Low', 'Medium', 'High']

 

Отрисуем график:

 

draw_bullet_graph(current_value, target, ranges, labels)

 

 

Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.

© Лена Капаца. Все права защищены.