matplotlib_venn
es un paquete de Python que provee funciones para dibujar diagramas de Venn de dos y tres clases o conjuntos. Corre en las veriones 2.x y 3.x.
Se instala sencillamente vía pip
:
pip install matplotlib_venn
Este comando también instalará las dependencias requeridas: SciPy, NumPy y matplotlib.
Alternativamente puedes visitar la página de PyPI, descargar el código de fuente y ejecutar:
python setup.py install
Dibujar un diagrama
El procedimiento mínimo para dibujar un diagrama de Venn es el siguiente.
from matplotlib import pyplot as plt from matplotlib_venn import venn2 venn2((1, 1, 1)) plt.show()
La función venn2()
genera un diagrama de dos conjuntos, como se muestra a continuación.
El argumento indica el tamaño relativo de los tres subconjuntos en este orden: Ab
(izquierda), aB
(derecha), AB
(intersección). Así, la tupla (1, 2, 1)
dibujaría el conjunto B del doble de tamaño respecto de A.
Para identificar a cada uno de los subconjuntos (tres en diagramas de dos conjuntos) el módulo utiliza una nomenclatura que consiste en colocar un 1 para indicar que la sección está incluida en el conjunto y un 0 para indicar que está excluida. De esta manera, siguiendo el orden «ABC», el subconjunto 10
es el de la izquierda (el que pertenece a A pero no a B); el 01
, el de la derecha (el que pertenece a B pero no a A); y el 11
, el del medio (la intersección).
Teniendo esto en cuenta, como primer argumento también podemos pasar un diccionario indicando el tamaño de cada uno de los subconjuntos.
venn2({"10": 1, "01": 2, "11": 1})
El parámetro set_labels
permite cambiar los nombres de los conjuntos mostrados en el diagrama.
venn2((1, 1, 1), set_labels=("X", "Z"))
Indicando set_labels=None
se remueven las referencias de la imagen.
set_colors
determina el color de los conjuntos.
venn2((1, 1, 1), set_colors=("#888888", "#0000FF"))
El color de las instersecciones es calculado automáticamente.
Nótese que, por defecto, tienen un valor alpha de 0.4
, i.e., 60% de transparencia. Utilícense valores de 0.0
a 1.0
en el parámetro de ese mismo nombre.
# Deshabilita la transparencia. venn2((1, 1, 1), set_colors=("#888888", "#0000FF"), alpha=1)
La función venn2()
retorna una instancia de una clase llamada VennDiagram
. En particular, los métodos de ésta que nos interesan son get_label_by_id()
y get_patch_by_id()
. Ambas toman un subconjunto y retornan instancias de matplotlib.text.Text
y matplotlib.patches.PathPatch
, respectivamente. A partir de ellas podemos modificar individualmente el aspecto de cada subconjunto. Por ejemplo, el siguiente código cambia el color y el texto del subconjunto 11
(i.e. AB
).
diagram = venn2((1, 1, 1)) diagram.get_label_by_id("11").set_text("Intersección") diagram.get_label_by_id("11").set_color("#FFFFFF")
O bien alterar el color de un subconjunto en particular:
# Establece el color del conjunto B. diagram.get_patch_by_id("01").set_color("#0000FF")
La función venn3()
es esencialmente similar. El primer argumento será ahora una tupla de siete elementos que se corresponden con los siete subconjuntos en el siguiente orden: Abc
, aBc
, ABc
, abC
, AbC
, aBC
, ABC
.
from matplotlib_venn import venn3 diagram = venn3((1, 1, 1, 1, 1, 1, 1))
De la misma forma, para identificar a cada uno de los subconjuntos se emplean ahora tres dígitos según el orden A, B, C. La imagen a continuación muestra cada uno de ellos con su respectivo identificador.
Generado por el siguiente código:
diagram = venn3((3, 3, 1, 3, 1, 1, 1)) for subset in ("111", "110", "101", "100", "011", "010", "001"): diagram.get_label_by_id(subset).set_text(subset)
Para esta función también aplican los argumentos alpha
, set_labels
y set_colors
. Estos últimos dos requieren, lógicamente, tuplas de tres elementos.
Otras opciones
Las funciones venn2_circles()
y venn3_circles()
dibujan los contornos de los subconjuntos correspondientes según el primer argumento.
from matplotlib_venn import venn3_circles venn3_circles((1, 1, 1, 1, 1, 1, 1))
Pueden ser utilizadas en conjunción con venn2()
y venn3()
para añadir bordes a los diagramas. Además, soportan los parámetros color
, alpha
, linewidth
y linestyle
para configurar color, transparencia, tamaño (en píxeles) y tipo de línea. Potenciales valores para linewidth
son ":"
, "-."
, "--"
y "-"
según la referencia de matplotlib.
from matplotlib_venn import venn3, venn3_circles subsets = (3, 3, 1, 3, 1, 1, 1) venn3(subsets) venn3_circles(subsets, color="#008000", alpha=1, linestyle="-.", linewidth=3)
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter
en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.