Librería para representar visualmente grafos de tipo diccionario
Project description
graphdisplay
Resumen
graphdisplay es un paquete de python elaborado e ideado por Alberto Penas Díaz, cuya finalidad es facilitar la visualización de grafos a los alumnos de Estructuras de Datos y Algoritmos. Actualmente solo soporta la visualización de grafos implementados a través de un diccionario, tal y como se aportan como código base en la asignatura.
¿Quieres contribuir?
Este es un proyecto de código abierto hecho por y para estudiantes así que cualquier ayuda, comentario o sugerencia es bienvenido. La mejor manera de contribuir es añadir los bugs que os encontréis en el apartado de Issues pero también estoy completamente abierto a responder cualquier duda o ayuda desde mi correo personal (disponible en mi perfil de github). ¡Muchas gracias de antemano!
Método de uso
Para instalar la librería, basta con escribir el siguiente comando en la terminal: pip install graphdisplay
, con esta, se instalarán también otras dependencias, ya sean las librerías
tkinter y math (que muchas veces vienen instaladas por defecto en python).
Una vez instalado, se debe importar el paquete desde donde se esté trabajando con: from graphdisplay import GraphGUI
. Una vez hecho esto, se debe instanciar un grafo de tipo diccionario
para finalmente introducirlo como argumento al instanciar un objeto de tipo GraphGUI, el cual mostrará en una ventana el grafo y ofrecerá la posibildad de mover los vértices con el ratón
para una mejor visualización. Al desplazar los vértices por la pantalla y fijar su posición, si se cierra la ventana y se vuelve a abrir, el grafo seguirá con la forma con la que se ha movido
antes.. Cabe destacar que, únicamente es necesario especificar como argumento el grafo que se quiere representar pero además hay otros ajustes que pueden ser útiles a la hora de mostrar
grafos grandes y complejos:
- graph: es el objeto de tipo grafo que se va a representar ES MUY IMPORTANTE que el grafo que se introduce como argumento sea el implementado en base al código base de la asignatura. Si alguno de los atributos cambiase de nombre, el programa no funcionaría correctamente. Para más información, consultar el respositorio oficial de la asignatura o utilizar la implementación de grafos que viene por defecto con el paquete.
- node_radius: el radio de cada vértice del grafo, por defecto es 40 y puede tomar cualquier valor entero entre 10 y 100
- scr_width: el tamaño en píxeles del ancho de la ventana, por defecto es 600 y puede tomar cualquier valor entero entre 200 y 1000
- scr_width: el tamaño en píxeles de la altura de la ventana, por defecto es 600 y puede tomar cualquier valor entero entre 200 y 1000
Dicho esto, algunos ejemplos de uso podrían ser los siguientes:
g = Graph([1, 2, 3])
g.addEdge(1, 2)
g.addEdge(2, 3)
# Para representar el grafo con todos los valores por defecto
GraphGUI(g)
# Para ajustar el radio de los nodos a 32, el ancho y largo de la pantalla a 700
GraphGUI(g, 32, 700, 700)
# Para ajustar únicamente el ancho de la pantalla a 200 píxeles
GraphGUI(g, scr_width=200)
Además, también es posible generar este tipo de grafos a través de la librería. Importándolo con from graphdisplay import Graph
, se puede instanciar un objeto de tipo Graph, pasándole como
argumento una lista de los vértices del grafo para después, añadirle las aristas con el método add_edge
, con los vértices que conecta la arista además del valor/coste de la arista.
Ejemplo de uso
Para instanciar un grafo de tipo diccionario, se debe hacer de la siguiente manera:
labels = ['A', 'B', 'C', 'D', 'E']
g = Graph(labels)
# Now, we add the edges
g.addEdge('A', 'C', 12) # A->(12)C
g.addEdge('A', 'D', 60) # A->(60)D
g.addEdge('B', 'A', 10) # B->(10)A
g.addEdge('C', 'B', 20) # C->(20)B
g.addEdge('C', 'D', 32) # C->(32)D
g.addEdge('E', 'A', 7) # E->(7)A
g.addEdge('A', 'E', 50) # A->(50)E
Si queremos mostrar la pantalla, basta con instanciar un objeto de tipo GraphGUI, pasándole como argumento el grafo que queremos mostrar:
GraphGUI(g)
Y nos mostrará la ventana:
Sabiendo cómo instanciar grafos, podemos ahora representar objetos algo más complicados ajustando un poco los parámetros de la instancia GraphGUI. En este caso: GraphGUI(my_gragph, 30, 1000, 1000)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file graphdisplay-0.3.2.tar.gz
.
File metadata
- Download URL: graphdisplay-0.3.2.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe494b3199edf29441ef8078daaa3ac697f470481d1740bc64a0dbbdcf298fe3 |
|
MD5 | fb043c79fa6d447eee55a731e203a210 |
|
BLAKE2b-256 | 4cabd008ed1e881e7e7fff6e1f826b0bd7c84552b05ecc6a1fca3cf4573ae6c1 |