# data[].attributes.body
import matplotlib.pyplot as plt
from matplotlib_venn import venn3


U = set(range(1, 40)) #Creamos el universo U

# Creamos los conjutos con los valofres predefinidos
A = {x for x in U if x % 6 == 0}   # múltiplos de 6
B = {x for x in U if x % 8 == 0}   # múltiplos de 8
C = {x for x in U if x % 10 == 0}  # múltiplos de 10

#
plt.figure(figsize=(8, 8)) # Crea la pantalla con el tamaño establecido
v = venn3([A, B, C], set_labels=('A: múltiplos de 6', 'B: múltiplos de 8', 'C: múltiplos de 10')) # Añade titulos a los conjuntos

#Para los colores en los conjuntos
if v.get_patch_by_id('110'):
    v.get_patch_by_id('110').set_color('orange')#Cojunto color naranja
    v.get_patch_by_id('110').set_alpha(0.7)


for region in ['010', '001', '011', '101', '111']:
    if v.get_patch_by_id(region):
        v.get_patch_by_id(region).set_color('lightgreen')#Cojunto color verde
        v.get_patch_by_id(region).set_alpha(0.6)

#Mostrar los números reales en cada zona

def format_set(s):
    s = sorted(list(s))
    return ', '.join(map(str, s[:3])) + ('...' if len(s) > 3 else '')

# Conjunto A
if v.get_label_by_id('100'):
    v.get_label_by_id('100').set_text(format_set(A - (B | C)))
# Conjunto B
if v.get_label_by_id('010'):
    v.get_label_by_id('010').set_text(format_set(B - (A | C)))
# Conjunto C
if v.get_label_by_id('001'):
    v.get_label_by_id('001').set_text(format_set(C - (A | B)))
# Conjunto A ∩ B
if v.get_label_by_id('110'):
    v.get_label_by_id('110').set_text(format_set((A & B) - C))
# Conjungto A ∩ C
if v.get_label_by_id('101'):
    v.get_label_by_id('101').set_text(format_set((A & C) - B))
# Conjunto B ∩ C
if v.get_label_by_id('011'):
    v.get_label_by_id('011').set_text(format_set((B & C) - A))
# Conjunto A ∩ B ∩ C
if v.get_label_by_id('111'):
    v.get_label_by_id('111').set_text(format_set(A & B & C))

# Título de la gráfica
plt.title("Diagrama de Venn triple\n(A∩B)-C en naranja, (B-A)∪C en verde")
plt.show() #Nos permite visualizar la gráfica

#Imprimir los conjutos
print("A =", A)
print("B =", B)
print("C =", C)
print("(A ∩ B) - C =", (A & B) - C)
print("(B - A) ∪ C =", (B - A) | C)