Notxor tiene un blog

Defenestrando la vida

Gráficos con pikchr

Notxor
2024-09-30

En el blog ya he hablado de pikchr y en ese artículo podéis ver lo básico del sistema. Lo traigo de nuevo porque escribiendo unos apuntes para impartir un curso lo he utilizado con profusión y estoy maravillado de sus posibilidades. Es una de esas herramientas que me encontré buceando por el mundillo1 de Tcl/Tk, SQLite y Fossil.

Como sabéis, porque lo he contado innumerables veces, suelo generar mis cosas siempre a partir de texto plano. Concretamente, utilizo el org-mode de Emacs para ello. Los bloques de código que proporciona dicho modo son una herramienta increíble para realizar también los gráficos utilizando texto plano con herramientas como GraphViz-Dot o PlantUML. Sin embargo, con dichas herramientas no puedo hacer todos los gráficos que necesito. En muchas ocasiones recurría a Inkscape para generar un archivo SVG e incrustarlo en el documento. Lo que era un incordio, porque tenía que abrir dicho programa para dibujar y echaba de menos la agilidad que me proporcionan graphviz y plantuml. Conocía pikchr, pero no había pasado de hacer algunas pruebas y poco más.

Por ejemplo, estoy con la documentación de un curso sobre conflicto y negociación. El resumen gráfico en el tema de las fases de un conflicto es el siguiente2:

Fase I Fase II Fase III Fase IV Fase V Antecedentes Condición germen Condición necesaria No suficiente Personalización percepción conflicto Delimita los temas del conflicto Emociones Sentimientos Intenciones cta. generan Intención de competir Intención de colaborar Intención de ceder Intención de evadirse Intención de compromiso Comportamiento de las partes Gestión regula Ignorar Ceder Imponer Colaborar Arbitraje Negociación Resultados Perder -- Perder Ganar -- Perder Ganar -- Ganar

Este gráfico no podría haberlo hecho con graphviz o con plantuml. Incluso con Inkscape me hubiera costado colocar elementos, alinearlos, poner guías, etc. Sin embargo, con un poco de ayuda de Emacs –sí, tiene un modo pikchr incluido– he podido ir dibujando, elemento a elemento todo el dibujo.

Situar elementos en el dibujo

Cuando empecé con pikchr me resultaba complicado situar elementos en el dibujo. El modo en que fluye el dibujo limitaba mi forma de trabajar. Acostumbrado a otras herramientas, donde es la propia herramienta la que elige dónde situar un elemento u otro, esperaba de ésta la misma funcionalidad. La tiene, pero ponía a prueba mi capacidad espacial a la hora de dibujar. El acostumbrarme a situar las cosas donde quiero, a guiar las líneas y los textos, a utilizar elementos invisibles para colocarlos y otros truquillos han hecho que me resulte una herramienta mucho más completa de lo que me pareció al principio. Puedes ser tan preciso como quieras, puedes dejar que fluya o forzar la posición, tú eliges.

box "Hola"; arrow; box "Mundo"

Ese código da como resultado:

Hola Mundo

Si cambiamos hacia dónde fluye:

down
box "Hola"; arrow; box "Mundo"
move
right
box "Hola"; arrow; box "Mundo"
move
up
box "Hola"; arrow; box "Mundo"
Hola Mundo Hola Mundo Hola Mundo

Como vemos, dejar el alineamiento al propio flujo de dibujo de pikchr presenta algunos inconvenientes, que eran los que me volvía loco al principio de utilizar la herramienta.

down
box "Hola"; arrow; box "Mundo"
right
box "Hola" at 1.5cm east of 2nd box.e; arrow; box "Mundo"
up
box "Hola" at 15mm east of 4nd box.e; arrow; box "Mundo"

Podemos apreciar que se puede hacer referencia a los elementos por su orden de aparición para situar el siguiente. Vemos que en el segundo grupo de elementos se hace referencia a la segunda caja para situar la tercera a 1.5cm al este de la misma. Para acotar mejor las distancias y visualizar mejor el espacio, en el resultado he añadido acotaciones:

Hola Mundo Hola Mundo Hola Mundo 1.5cm 15mm

Si habéis mirado el código para ver las acotaciones, veréis que también me aseguro que las medidas son correctas con una instrucción assert.

Cada elemento dentro del gráfico tiene una serie de propiedades. Las que más vas a utilizar son los puntos de referencia:

# Puntos de situación
B1: box rad 5mm color blue thin width 5cm height 3.5cm
    dot at B1.c color red "c" above
    dot at B1.nw "nw" above color red
    dot at B1.n "n" above color red
    dot at B1.ne "ne" above color red
    dot at B1.w "w" rjust color red
    dot at B1.e "e" ljust color red
    dot at B1.sw "sw" rjust color red
    dot at B1.s "s" below color red
    dot at B1.se "se" ljust color red

# Acotaciones de ancho, alto y radio
X1: line thin color gray down 100% from 20mm south of B1.w
X2: line same as X1 from 20mm south of B1.e
    arrow <-> dashed thin color gray from 3/4<X1.start,X1.end> right until even with X2 "width o wid" above
X3: line thin color gray left 100% from 30mm west of B1.n
X4: line same as X3 from 30mm west of B1.s
    arrow <-> dashed thin color gray from 3/4<X3.start,X3.end> down until even with X4 "height o ht" above aligned
X5: line thin color gray right 100% from 30mm east of B1.n
X6: line thin color gray right 100% from 5mm south of X5.start
    arrow <-> dashed thin color gray from X5 down until even with X6 "radius o rad" ljust

El resultado del código anteriores es:

c nw n ne w e sw s se width o wid height o ht radius o rad

Y como se puede apreciar para dibujar se utilizan comandos como right, up, down, left, es decir: derecha, abajo, arriba, izquierda. Y las cosas se sitúan south, north, east, west, es decir: al sur, al norte, al este o al oeste de un punto. También podemos situarnos en fracciones de la distancia entre dos puntos utilizando la notación:

fracción<punto1,punto2>

Conclusiones

No hay nada como leerse la documentación y mirar todos los ejemplos que he podido encontrar. Creo que aún no he conseguido sacar toda la chicha que tiene el asunto.

En fin, pikchr me parece una herramienta bastante completa. Se asemeja a poder dibujar un SVG a partir de instrucciones simples, aunque no tiene todas las cosas que permite un SVG. Por ejemplo, no soporta gradientes o colores con canal alfa. Para la muchas de las cosas que debo dibujar me facilita la vida y si necesito esas otras cosas que no me proporciona, siempre puedo modificar el resultado desde Inkscape, por ejemplo, para añadirle fórmulas LaTeX.

Notas al pie de página:

1

Tengo un amigo que lo llama secta.

2

Si pinchas en el gráfico verás el código fuente que lo ha generado.

Categoría: pikchr gráficos

Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, he decidido no proporcionar dicha opción en el Blog. Si alguien quiere comentar algo, me puede encontrar en esta cuenta de Mastodon, también en esta otra cuenta de Mastodon y en Diaspora con el nick de Notxor.

Si usas habitualmente XMPP (si no, te recomiendo que lo hagas), puedes encontrar también un pequeño grupo en el siguiente enlace: notxor-tiene-un-blog@salas.suchat.org

Disculpen las molestias.

Escrito enteramente por mi Estulticia Natural sin intervención de ninguna IA.