Загрузка данных


import matplotlib.pyplot as plt
from matplotlib_venn import venn3

# Значения из таблицы: (100, 010, 110, 001, 101, 011, 111)
# Соответствует областям: (5, 3, 7, 2, 6, 4, 8)
subset_values = (6, 5, 8, 7, 4, 2, 2)

def draw_step(ax, title, highlight_ids):
    """Отрисовывает диаграмму и выделяет указанные области синим цветом."""
    v = venn3(subsets=subset_values, set_labels=('A', 'B', 'C'), ax=ax)
    
    # Список всех возможных ID областей в venn3
    all_ids = ['100', '010', '110', '001', '101', '011', '111']
    
    # Сбрасываем цвета всех областей на белый с черной рамкой
    for region_id in all_ids:
        patch = v.get_patch_by_id(region_id)
        if patch:
            patch.set_color('white')
            patch.set_edgecolor('black')
            patch.set_alpha(1.0)
            
    # Закрашиваем целевые области
    for region_id in highlight_ids:
        patch = v.get_patch_by_id(region_id)
        if patch:
            patch.set_color('lightblue')
            
    ax.set_title(title)
    return v

# Создаем общее полотно для 3 шагов
fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# Шаг 1: Построить диаграмму для A (области 5, 6, 7, 8)
# Идентификаторы: 100, 101, 110, 111
draw_step(axes[0], 'Шаг 1: Множество A\n(области 5, 6, 7, 8)', ['100', '101', '110', '111'])

# Шаг 2: Построить диаграмму для B ∩ A (области 7, 8)
# Идентификаторы: 110, 111
draw_step(axes[1], 'Шаг 2: B ∩ A\n(области 7, 8)', ['110', '111'])

# Шаг 3: Построить диаграмму для A \ (B ∩ A) (области 5, 6)
# Идентификаторы: 100, 101
draw_step(axes[2], 'Шаг 3: A \ (B ∩ A)\nИтоговая мощность: 10', ['100', '101'])

plt.tight_layout()
plt.show()