Ciber Geek >

D3.js

La Wikipedia está viva

A veces me gusta imaginar a la Wikipedia como un coral, un organismo multicelular que se nutre de todos para sobrevivir. Sobre todo en la época que aparece el banner con Jimmy poniendo cara de perro mojado para que le tiren un par de millones. Jimmy, sos groso, sabelo. Jimmy ¡Yo te banco!

Ok ¿Qué quería escribir? Ahhh, si. Que ahora se puede escuchar a la Wiki.

Listen to Wikipedia

“Listen to the Wiki” garpaba mas.

Básicamente es un sitio que permite escuchar y ver las ediciones y los registros de usuarios de la Wikipedia, es super entretenido, y a mi particularmente me pareció que el sonido de fondo que se genera es parecido al de Minecraft. Ojo, no juego hace un par de años así que puede haber cambiado.

¿Qué esperan? ¡¡ENTREN!! ¡¡No los voy a defraudar!!

menem no los voy a defraudar

MENEM, al menos es capicúa.

Juro que en el primer intento la subida del archivo falló. ¿Será que el IDS detectó algo sospechoso?

Si quieren aprender mas pueden entrar al sitio de “Listen to Wikipedia”, y si eso no les alcanza en el sitio hay un link al repo en Github. Lo básico es que está hecho con D3.js y Howler.js.


Va a haber un antes y un después en el mundo cuando Google, o lo que lo reemplace, entienda que la foto de Carlos Saúl es utilizada con humor, como una cachada, en broma. ¡GOOGLE, TE ESTOY BOLUDEANDO, PAPÁ!

 

 

Convertir SVG a PNG, en el navegador y listo para descargar

Ya estamos en un tiempo en el que virtualmente todos los navegadores más usados soportan SVG, por lo cual el uso de éste elemento en los sitios web se ha hecho más común, y aún más con la gran cantidad de librerías disponibles para trabajar con SVG hechas en Javascript, siendo D3.js una de las más populares.

Un detalle que pueden haber notado es que para el usuario es a veces un poco complicado descargar un gráfico hecho en SVG, algo que no pasaba con formatos de imágenes como JPG y PNG. Pero afortunadamente, hay una solución a éste problema, y no puede ser más fácil.

bandera argentina

Un pequeña muestra

Descargar graficos SVG como PNG

saveSvgAsPng es una librería en Javascript que permite descargar fácilmente gráficos SVG en formato PNG, lo cual es más que interesante y muy útil.

El uso es muy sencillo, es solo cuestión de incluir la librería en el sitio, y llamarla mediante la función saveSvgAsPng, con 3 parámetros, el primero es el elemento SVG, el segundo el nombre del archivo que se genera, y el tercero indica el factor de escala, o sea, el tamaño de la imagen respecto al del SVG.

Lo mejor de todo es que como funciona desde el navegador también pueden abrir cualquier SVG que tengan en su PC y utilizar ésta herramienta para convertirlo a PNG.

Fun with Flags y D3.js, presentan, el regreso de los patrones

Hace unas semanas había hecho un pequeño experimento con patrones utilizando D3.js y números pseudo-random generados por la función Math.random() de Javascript. El resultado fue el que pueden ver aquí abajo. Sin dudas, arte abstracto del mejor nivel.

 

patron pixelamo rojo

Pixelamo con D3.js

Algo que había descubierto era la imposibilidad de incorporar Javascript fácilmente en los posts de WordPress, y para lo cual escribí el siguiente plugin que se llama Script Embeder, por ahora solo está disponible en GitHub, pero cuando termine de pulirlo voy a ver si lo subo a los repos oficiales de plugins de WordPress. Actualmente se encuentra totalmente funcional, así que pueden usarlo si quieren, y si tienen algún problema me avisan y los ayudo. Leer mas »

D3.js, diseño de indumentaria basado en patrones y números aleatorios

D3.js es una de las librerías mas populares de Javascript al momento de trabajar con gráficos, si bien no es la única, de las que probé, es sin dudas la más poderosa, lo cual no siempre es bueno, si quieren algo simple usen Chart.js.

¿Diseño de indumentaria? Discúlpame el atrevimiento pero ¿estás drogado?

No, bah, no sé, no, pero creo que no. Ok, arreglado el asunto los interiorizo un poco en mis delirios. Resulta que el otro día me llamó la atención el diseño de un short de Nike el cual es bastante peculiar, AD Pixelamo és el nombre de ésta belleza. Y lo primero que se me paso por la mente es que éste tipo de diseño puede ser “creado al azar”, lo cual me llevo a mas delirios místicos.

nike ad pixelamo

Ok, ésto parece una propaganda.

AD Pixelamo, con D3.js

Por suerte D3 hace todo tan fácil que en unos minutos ya tenía un prototipo funcionando, y obtuve resultados bastante buenos.

patron pixelamo rojo

Pixelamo con D3.js

La función básicamente genera un numero al “azar” entre 50 y 200, y se lo asigna a la primera componente de un vector RGB, que se corresponde con el color rojo. Si le asignamos el numero a la componente correspondiente al color verde, obtenemos lo siguiente.

pixelamo verde

Así se ve Hulk cuando le hacen zoom

El código del prototipo.

Bueno, hacer un montón de cuadrados de colores puede no parecerles muy interesante, así que para hacer mas divertidos éstos patrones estoy haciendo un plugin para WordPress para facilitar el agregado de código Javascript a los posts, ya que necesito un plugin que me permita añadir varios scripts, elegir el orden y que me de la opción de elegir la ubicación. Además, no quiero que los scripts se agreguen a todos los posts como hacen algunos plugins que andan dando vueltas por ahí.

Maquillando gráficos en D3.js

Siguiendo con la escueta introducción a D3.js, en ésta ocasión la idea es hacer un poco mas lindo el gráfico feo y aburrido del tutorial anterior, para ello se le va a agregar color y etiquetas para identificar las barras.

Llega la primavera, llegan los colores

El atributo fill es el que le da color, literalmente, a los elementos SVG, su uso es igual al de otros atributos, como los que dan las coordenadas o el tamaño de los elementos, obviamente, los valores que se le asignan deben ser colores validos, pudiendo usar varias sintaxis, RGB, Hexadecimal o nombres explícitos. Con D3 asignar el valor de los atributos es siempre tan sencillo como .attr(‘atributo’, valor), magia!

Pero ¿y esa barra de que es?

Las etiquetas hacen de nuestro mundo un lugar menos caótico (?) ¿que hubiese sido de Monk sin etiquetas? Agregar etiquetas es simple gracias a, sí, a D3, aunque puede que necesiten un poquito de matemática.

Para las etiquetas vamos a necesitar texto, por suerte SVG viene armado hasta los dientes (?), y tenemos elementos para ésto (text). Con D3, además, agregar un elementos de texto es similar a lo que se hizo con las barras, solamente cambia el tipo de elemento, obviamente, y algunos atributos.

Barras etiquetadas

Okey, eso es …¿útil?

Ahora hay que ajustar la posición de las etiquetas, lo que no es tan difícil.

Lo primero es centrar la posición de las etiquetas, en éste momento la posición está dada por la siguiente formula

i*(svgwidth/datos.length)

Para centrarlas debemos modificar la formula para centrarla dentro de la barra, o sea que deberíamos sumarle a la posición la mitad del ancho de las barras, que es (svgwidth/datos.length)/2, por lo que la formula de la posición respecto a x queda:

i*(svgwidth/datos.length)+(svgwidth/datos.length)/2

Pero como no podía ser de otra manera, tenemos un problema nuevamente, ya que si el texto es largo no va a queda centrado, pero a no desesperar, también hay solución para eso.

Denle la bienvenida al atributo text-anchor, éste atributo lo que hace es alinear el texto respecto a un punto dado, tiene 4 configuraciones posibles : start, middle, end e inherit.

  • Start: El texto comienza en el punto dado.
  • Middle: El “medio” del texto queda en el punto dado.
  • End: El texto termina en el punto dado.
  • Inherit: Hereda la configuración del elemento padre.

En caso de que no se especifique el valor por defecto es start.

Ésto es lo que llevamos hasta ahora.

etiquetas centradas text-anchor

La etiqueta está en orden!

Por ultimo, algo que depende del gusto de cada uno, pero en mi caso prefiero que el texto éste contenido dentro de la barra, pero en realidad hay que considerar nuestros datos antes de tomar ésta decisión.

Encerrado y colorido

Los últimos toques antes de dar por terminada la obra, ojo, ésto sigue, aún nos faltan los ejes y la normalización.

Para llevar las etiquetas al interior de las barras vamos a jugar con la posición respecto a y, es tan simple como sumarle un valor determinado a la posición ¿por qué determinado? Porque va a depender del tamaño de las etiquetas, sino podemos terminar con la mitad del texto adentro de la barra y el resto afuera.

Probablemente alguien se haya perdido ¿Restarle? ¿Con que te drogás, Tomás? Ésto se debe a la forma en que maneja los ejes SVG, y pasa con casi todo lo relacionado a gráficos en la PC, la esquina superior izquierda se considera la coordenada (0,0), cuando estamos acostumbrados de las matemáticas a trabajar con el origen de coordenadas ((0,0)) ubicado en la esquina inferior izquierda, pero bueno, detalles, imaginen que estamos en el plano y nuestro gráfico se encuentra en el cuarto cuadrante.

Los colores, como en el resto de los elementos SVG se dan con el atributo fill.

etiqueta coloridas d3js

Etiqueta blanca!

Finalmente, el código, mi único héroe en éste lío.

Y el Fiddle para que se pongan manos a la obra.

En el código del texto pueden ver que hay varios atributos que no comenté en el tutorial, en realidad ésos atributos son “compartidos” con CSS y son bastante sencillos.

  • font-family: nos permite asignar la fuente, se pueden separar con comas varias fuentes diferentes en caso de que el usuario no las tenga instaladas en su PC.
  • font-size: es el tamaño de la fuente en pixels, en éste caso.

Pueden ver que al atributo y del texto se le suman 15 para “meter” las etiquetas adentro de las barras, y también le restamos 1 al width de las barras para que estén separadas.

Espero les haya sido de utilidad éste tutorial, cualquier consulta o sugerencia es bienvenida.