Бізнес-стратегія: Якого розміру замовлень варто прагнути на основі продажної спроможності та потреби в капіталі

Стратегія розміру замовлень

Скрипт для генерації діаграми стратегії розміру замовлень

plot_order_size_strategy.py
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np

def create_order_size_strategy():
    """
    Створює чіткішу діаграму стратегії розміру замовлень з кращим розміщенням міток.
    """

    fig, ax = plt.subplots(figsize=(11, 9))

    # Створити сітку (meshgrid)
    x = np.linspace(0, 10, 500)
    y = np.linspace(0, 10, 500)
    X, Y = np.meshgrid(x, y)

    Z = np.zeros_like(X)

    for i in range(len(x)):
        for j in range(len(y)):
            capital_need = X[j, i]
            sales_capacity = Y[j, i]

            # Скоригований підрахунок для чіткіших меж зон
            score = (capital_need / 10) * 1.3 - (sales_capacity / 10) * 0.9 + 0.35

            if score > 0.45:
                Z[j, i] = 2  # Великі замовлення
            elif score < -0.05:
                Z[j, i] = 0  # Малі замовлення
            else:
                Z[j, i] = 1  # Середні замовлення

    colors_list = ['#2ECC71', '#F1C40F', '#E74C3C']

    # Створити чіткі прямолінійні межі (аналітичні), щоб уникнути сходинчастих контурів
    x_line = np.linspace(0, 10, 500)

    # На основі score = 0.13*x - 0.09*y + 0.35
    def y_from_score(x, score):
        return (0.13 * x + 0.35 - score) / 0.09

    # Межі, що відповідають попереднім порогам
    y_boundary_low = y_from_score(x_line, 0.45)   # між Великими та Середніми
    y_boundary_high = y_from_score(x_line, -0.05) # між Середніми та Малими

    # Обрізати до діапазону побудови
    y_low_clip = np.clip(y_boundary_low, 0, 10)
    y_high_clip = np.clip(y_boundary_high, 0, 10)

    # Заповнити області: Великі (червоний) нижче y_low, Середні (жовтий) між, Малі (зелений) вище y_high
    ax.fill_between(x_line, 0, y_low_clip, where=(y_low_clip > 0), color=colors_list[2], alpha=0.75, zorder=0)
    ax.fill_between(x_line, y_low_clip, y_high_clip, where=(y_high_clip > y_low_clip), color=colors_list[1], alpha=0.75, zorder=0)
    ax.fill_between(x_line, y_high_clip, 10, where=(y_high_clip < 10), color=colors_list[0], alpha=0.75, zorder=0)

    # Намалювати прямі лінії меж
    ax.plot(x_line, y_boundary_low, color='#2C3E50', linewidth=2.5)
    ax.plot(x_line, y_boundary_high, color='#2C3E50', linewidth=2.5)

    # ==========================================
    # МІТКИ ЗОН - Належним чином відцентровані
    # ==========================================

    # Малі замовлення - верхній лівий кут
    ax.text(1.0, 9, 'МАЛІ\nЗАМОВЛЕННЯ', fontsize=16, fontweight='bold',
            ha='center', va='center', color='white',
            bbox=dict(boxstyle='round,pad=0.5', facecolor='#27AE60',
                     edgecolor='white', linewidth=3))

    # Середні замовлення - центр по діагоналі
    ax.text(2.5, 5.5, 'СЕРЕДНІ\nЗАМОВЛЕННЯ', fontsize=16, fontweight='bold',
            ha='center', va='center', color='white',
            bbox=dict(boxstyle='round,pad=0.5', facecolor='#D4AC0D',
                     edgecolor='white', linewidth=3))

    # Великі замовлення - нижній правий кут
    ax.text(6.5, 3, 'ЛИШЕ\nВЕЛИКІ\nЗАМОВЛЕННЯ', fontsize=16, fontweight='bold',
            ha='center', va='center', color='white',
            bbox=dict(boxstyle='round,pad=0.5', facecolor='#C0392B',
                     edgecolor='white', linewidth=3))

    # ==========================================
    # Налаштування осей
    # ==========================================
    ax.set_xlim(0, 10)
    ax.set_ylim(0, 10)
    ax.set_xlabel('ПОТРЕБА В КАПІТАЛІ', fontsize=14, fontweight='bold', labelpad=10)
    ax.set_ylabel('ПРОДАЖНА СПРОМОЖНІСТЬ', fontsize=14, fontweight='bold', labelpad=10)

    # Підписи позначок
    ax.set_xticks([0.5, 5, 9.5])
    ax.set_xticklabels(['Низька', 'Середня', 'Висока'], fontsize=11, fontweight='bold')
    ax.set_yticks([0.5, 5, 9.5])
    ax.set_yticklabels(['Низька', 'Середня', 'Висока'], fontsize=11, fontweight='bold')

    # Заголовок
    ax.set_title('Стратегія розміру замовлень',
                 fontsize=18, fontweight='bold', color='#2C3E50', pad=15)

    # Напрямну стрілку видалено, щоб зменшити візуальний шум

    # Стиль
    for spine in ax.spines.values():
        spine.set_linewidth(2)
        spine.set_color('#2C3E50')

    # Ледь помітна сітка
    ax.grid(True, alpha=0.2, linestyle='--', color='#666666')

    plt.tight_layout()
    plt.subplots_adjust(bottom=0.08)

    return fig, ax


if __name__ == "__main__":
    print("Створення чіткої діаграми стратегії розміру замовлень...")

    fig, ax = create_order_size_strategy()
    fig.savefig('order_size_strategy.svg', bbox_inches='tight',
                facecolor='white', edgecolor='none')
    print("✓ Збережено: order_size_strategy.png")

    plt.show()

Дивіться схожі статті за категоріями: Business