Stratégie d'entreprise : Quelle taille de commande viser en fonction de la capacité de vente et du besoin en capital

Stratégie de taille de commande

Script pour générer le graphique de stratégie de taille de commande

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

def create_order_size_strategy():
    """
    Crée une figure plus épurée de la stratégie de taille de commande avec un meilleur placement des étiquettes.
    """

    fig, ax = plt.subplots(figsize=(11, 9))
    
    # Créer la grille de maillage
    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 ajusté pour des limites de zones plus nettes
            score = (capital_need / 10) * 1.3 - (sales_capacity / 10) * 0.9 + 0.35
            
            if score > 0.45:
                Z[j, i] = 2  # Grandes commandes
            elif score < -0.05:
                Z[j, i] = 0  # Petites commandes
            else:
                Z[j, i] = 1  # Commandes moyennes
    
    colors_list = ['#2ECC71', '#F1C40F', '#E74C3C']

    # Créer des limites en lignes droites nettes (analytique) pour éviter les contours en escalier
    x_line = np.linspace(0, 10, 500)

    # Basé sur score = 0.13*x - 0.09*y + 0.35
    def y_from_score(x, score):
        return (0.13 * x + 0.35 - score) / 0.09

    # Limites correspondant aux seuils précédents
    y_boundary_low = y_from_score(x_line, 0.45)   # entre Grandes et Moyennes
    y_boundary_high = y_from_score(x_line, -0.05) # entre Moyennes et Petites

    # Limiter à la plage de tracé
    y_low_clip = np.clip(y_boundary_low, 0, 10)
    y_high_clip = np.clip(y_boundary_high, 0, 10)

    # Remplir les régions : Grandes (rouge) sous y_low, Moyennes (jaune) entre, Petites (vert) au-dessus de 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)

    # Tracer les lignes de limite droites
    ax.plot(x_line, y_boundary_low, color='#2C3E50', linewidth=2.5)
    ax.plot(x_line, y_boundary_high, color='#2C3E50', linewidth=2.5)

    # ==========================================
    # ÉTIQUETTES DE ZONES - Correctement centrées
    # ==========================================
    
    # Petites commandes - En haut à gauche
    ax.text(1.0, 9, 'PETITES\nCOMMANDES', fontsize=16, fontweight='bold',
            ha='center', va='center', color='white',
            bbox=dict(boxstyle='round,pad=0.5', facecolor='#27AE60', 
                     edgecolor='white', linewidth=3))
    
    # Commandes moyennes - Diagonale centrale
    ax.text(2.5, 5.5, 'COMMANDES\nMOYENNES', fontsize=16, fontweight='bold',
            ha='center', va='center', color='white',
            bbox=dict(boxstyle='round,pad=0.5', facecolor='#D4AC0D', 
                     edgecolor='white', linewidth=3))
    
    # Grandes commandes - En bas à droite
    ax.text(6.5, 3, 'GRANDES\nCOMMANDES\nUNIQUEMENT', fontsize=16, fontweight='bold',
            ha='center', va='center', color='white',
            bbox=dict(boxstyle='round,pad=0.5', facecolor='#C0392B', 
                     edgecolor='white', linewidth=3))
    
    # ==========================================
    # Configuration des axes
    # ==========================================
    ax.set_xlim(0, 10)
    ax.set_ylim(0, 10)
    ax.set_xlabel('BESOIN EN CAPITAL', fontsize=14, fontweight='bold', labelpad=10)
    ax.set_ylabel('CAPACITÉ DE VENTE', fontsize=14, fontweight='bold', labelpad=10)
    
    # Étiquettes de graduation
    ax.set_xticks([0.5, 5, 9.5])
    ax.set_xticklabels(['Faible', 'Moyen', 'Élevé'], fontsize=11, fontweight='bold')
    ax.set_yticks([0.5, 5, 9.5])
    ax.set_yticklabels(['Faible', 'Moyen', 'Élevé'], fontsize=11, fontweight='bold')
    
    # Titre
    ax.set_title('Stratégie de taille de commande', 
                 fontsize=18, fontweight='bold', color='#2C3E50', pad=15)

    # Flèche directionnelle supprimée pour réduire l'encombrement visuel

    # Style
    for spine in ax.spines.values():
        spine.set_linewidth(2)
        spine.set_color('#2C3E50')
    
    # Grille subtile
    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("Création du graphique épuré de stratégie de taille de commande...")

    fig, ax = create_order_size_strategy()
    fig.savefig('order_size_strategy.svg', bbox_inches='tight',
                facecolor='white', edgecolor='none')
    print("✓ Enregistré : order_size_strategy.png")

    plt.show()

Check out similar posts by category: Business