venn2
Un diagrama de Venn muestra el solape entre dos o más conjuntos. Matplotlib no incluye uno por sí mismo, pero el paquete matplotlib-venn (instálalo con pip install matplotlib-venn) sí, construido sobre matplotlib. Pasa dos objetos set de Python a venn2 y calculará y dibujará el solape automáticamente.
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
# Datos
A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
venn2([A, B])
# plt.show()

venn3
Para tres conjuntos usa venn3 en su lugar, que sigue exactamente la misma sintaxis y también calcula automáticamente todos los solapes (incluida la intersección de los tres conjuntos).
import matplotlib.pyplot as plt
from matplotlib_venn import venn3
# Datos
A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
C = {3, 4, 9, 10}
venn3([A, B, C])
# plt.show()

Colores
Personaliza el color de relleno de cada conjunto con set_colors, y la transparencia de los solapes con alpha.
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
# Datos
A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
venn2([A, B],
set_colors = ("#4C72B0", "#DD8452"),
alpha = 0.7)
# plt.show()

Etiquetas de los conjuntos
Las etiquetas junto a cada círculo (A, B por defecto) se fijan con set_labels.
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
# Datos
A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
venn2([A, B],
set_labels = ("Clientes 2024", "Clientes 2025"))
# plt.show()

Etiquetas de los subconjuntos
venn2 devuelve un objeto VennDiagram. Usa get_label_by_id sobre él para cambiar el texto de cualquiera de las tres regiones (10 para la zona exclusiva de la izquierda, 01 para la de la derecha y 11 para el solape).
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
# Datos
A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
v = venn2([A, B])
v.get_label_by_id('10').set_text(len(A - B))
v.get_label_by_id('01').set_text(len(B - A))
v.get_label_by_id('11').set_text(len(A & B))
# plt.show()

Añade un contorno a los círculos con venn2_circles (o venn3_circles para tres conjuntos), llamado justo después de venn2. Devuelve los patches de los círculos, así que también puedes personalizar su grosor y color de línea.
import matplotlib.pyplot as plt
from matplotlib_venn import venn2, venn2_circles
# Datos
A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
venn2([A, B])
venn2_circles([A, B], linewidth = 1.5, color = "gray")
# plt.show()

Título
Como venn2 y venn3 dibujan sobre los ejes activos de matplotlib, se puede añadir un título de la forma habitual con plt.title.
import matplotlib.pyplot as plt
from matplotlib_venn import venn2
# Datos
A = {1, 2, 3, 4, 5, 6}
B = {4, 5, 6, 7, 8}
venn2([A, B])
plt.title("Solape de clientes")
# plt.show()

También te puede interesar