SisdaiViolines
El componente <SisdaiViolines/>
se utiliza para construir diagramas de violines, los cuales son útiles para visualizar distribuciones de datos. A continuación se detalla su uso y configuración.
Ejemplo de implementación:
<SisdaiGraficas>
<SisdaiViolines
:datos="datos"
:variables="variables"
>
</SisdaiViolines>
</SisdaiGraficas>
API
Propiedades
datos
: Conjunto de datos a visualizar.Consiste en un arreglo de objetos en dónde cada objeto corresponde a un elemento de la distribución, el cual debe incluir una categoría y un valor numérico.- Tipo:
Array
- Valor predeterminado:
undefined
- Requerido: Sí
- Tipo:
Ejemplo de
datos
:json[ { "seguridad_social": "INSABI", "edad": 35 }, { "seguridad_social": "INSABI", "edad": 40 }, { "seguridad_social": "IMSS", "edad": 22 }, { "seguridad_social": "Otro", "edad": 19 }, ... ]
El arreglo mostrado anteriormente puede ser el objeto resultante de la importación de datos mediante la biblioteca D3.js o utilizando algún complemento (plugin) como plugin-dsv para procesar un archivo .csv con la siguiente estructura equivalente:
seguridad_social edad INSABI 35 INSABI 40 IMSS 22 Otro 19 ... ... En este ejemplo, seguridad_social indica las categorías con las que se agruparán los datos, mientras que edad es la variable numérica que se usará para calcular las los cuartiles y otros elementos de cada subconjunto de los datos. Cabe mencionar que los nombres de las claves en los diccionarios (o de las columnas desde el punto de vista de la tabla) no necesariamente deben coincidir con los del ejemplo mostrado. Las propiedades
variables
ynombre_indice
descritas a continuación nos permiten especificar el nombre de las claves (o columnas).
variables
: Arreglo de objetos que contienen información sobre el color y el nombre de la clave asociada a la variable numérica endatos
Si consideramos el caso anterior dedatos
, un ejemplo devariables
es:- Tipo:
Array
- Valor predeterminado:
undefined
- Requerido: Sí
- Tipo:
json{ "id": "edad", "nombre": "Edad", "color": "#2c7fb8" },
Esta propiedad incluye un validador para verificar que el objeto contenga las siguiente tres claves:
id
:su valor es unString
que debe coincidir con alguna subcategoría dedatos
, equivalente a uno de los nombres de las columnas.nombre
: su valor es un string que da más información sobre elid
y es unString
que puede ser empleado para globos de información.color
: Es unString
que define el color de los diagramas, especificado en RGB, hexadecimal u otro formato reconocido por CSS.
nombre_indice
: Especifica la clave empleada para las categorías que se usarán para agrupar al conjunto de datos.Por defecto es"categoria"
y con el ejemplo anterior dedatos
tendría que especificarse como"seguridad_social"
- Tipo:
String
- Valor predeterminado:
"categoria"
- Requerido: Sí
- Tipo:
numero_divisiones
: Define en cuántas partes se dividirá la distribución obtenida en el histograma.- Tipo:
Number
- Valor predeterminado:
10
- Requerido: No
- Tipo:
alineacion_eje_y
: determina la posición del eje vertical. Las opciones válidas son'izquierda'
o'derecha'
.- Tipo:
String
- Valor predeterminado:
"izquierda"
- Requerido: No
- Tipo:
angulo_etiquetas_eje_y
: es un valor numérico entre-90
y90
que indica el ángulo de rotación de las etiquetas del eje vertical.- Tipo:
Number
- Valor predeterminado:
0
- Requerido: No
- Tipo:
angulo_etiquetas_eje_x
: es un valor numérico entre-90
que indica el ángulo de rotación de las etiquetas eje horizontal.- Tipo:
Number
- Valor predeterminado:
0
- Requerido: No
- Tipo:
tabla_caption
: es un texto que se inserta en el elemento<caption>
de la tabla asociada a la gráfica.- Tipo:
String
- Valor predeterminado:
"Tabla de datos de la gráfica de violines"
- Requerido: No
- Tipo:
Métodos
calcularEscalas
: Este método se ejecuta al montar el componente o cuando se detectan cambios en las propiedadesdatos
,variables
o en las dimensiones del componente contenedor<SisdaiGraficas>
. Calcula escalas necesarias para graficar los datos.creaViolines
: Este método se ejecuta al montar el componente o cuando se detectan cambios en las propiedadesdatos
,variables
o en las dimensiones del componente contenedor<SisdaiGraficas>
.Crea y actualiza la gráfica de violines.
Propiedades expuestas
datos_hover
: Esta propiedad expuesta se actualiza según la posición del cursor cuando se usa el slotglobo-informacion
. Devuelve unObject
con los datos del diagrama asociado la categoría y corte más cercano indicada por el cursor. Los valores que devuelve el objeto corresponden a:"categoria"
: Categoría del violín"datos_segmento"
: Es unArray
que tiene la lista de datos asociados a la categoría y corte."x0"
: El valor mínimo del corte."x1"
: Es el valor máximo del corte."cantidad_muestras_segmento"
: Es el número de muestras de dicha categoría y corte. En otras palabras, es la longitud de"datos_segmento"
."cantidad_muestras_violin"
: Es el número de muestras de dicha categoría tomando en cuenta el violín completo.
escalaBanda
: Es la función de D3d3.scaleBand
que se emplea en el eje horizontal. Es útil cuando se desean agregar elementos al gráfico que se basen en la escala categórica.escalaLineal
: Es la función de D3d3.scaleLinear
que se emplea en el eje vertical. Es útil cuando se desean agregar elementos al gráfico que dependan de esta escala.
Ejemplos
<script setup>
import violin_resistencia_edad from '../../assets/datos/violin_resistencia_edad.json'
import { ref } from 'vue'
const datos = ref(violin_resistencia_edad)
const losViolines = ref()
</script>
<template>
<SisdaiGraficas
:titulo_eje_y="'Edad'"
:titulo_eje_x="'Tipo de resistencia'"
>
<template #panel-encabezado-vis>
<div>
<p class="vis-titulo-visualizacion">
Resistencia a antirretrovirales con respecto a la edad
</p>
<p class="vis-fecha-actualizacion">Última actualización: 14/05/2023</p>
<p class="vis-instruccional">Descripción o texto instruccional.</p>
</div>
</template>
<template #globo-informacion>
<SisdaiGraficasGloboInfo :ancho="200">
<p>
{{ losViolines?.datos_hover?.categoria }}<br />
{{ losViolines?.datos_hover?.cantidad_muestras_segmento }} casos de
{{ losViolines?.datos_hover?.x0 }} a casos de
{{ losViolines?.datos_hover?.x1 }} años
</p>
</SisdaiGraficasGloboInfo>
</template>
<SisdaiViolines
ref="losViolines"
:datos="datos"
:variables="{
id: 'edad',
nombre: 'Edad',
color: '#2c7fb8',
}"
:nombre_indice="'resistencia'"
/>
</SisdaiGraficas>
</template>
<script setup>
import { ref } from 'vue'
import violin_resistencia_edad from '../../assets/datos/violin_resistencia_edad.json'
import violin_seguridad_social_edad from '../../assets/datos/violin_seguridad_social_edad.json'
const base = ref(1)
const datos_dinamicos = ref(violin_resistencia_edad)
const variables_dinamicas = ref({
id: 'edad',
nombre: 'Edad',
color: 'purple',
})
function alternaDatos() {
if (base.value === 1) {
variables_dinamicas.value = {
id: 'edad',
nombre: 'Edad',
color: '#2c7fb8',
}
datos_dinamicos.value = violin_seguridad_social_edad
base.value = 2
} else {
variables_dinamicas.value = {
id: 'edad',
nombre: 'Edad',
color: 'purple',
}
datos_dinamicos.value = violin_resistencia_edad
base.value = 1
}
}
</script>
<template>
<SisdaiGraficas
:titulo_eje_y="'Edad'"
:titulo_eje_x="base === 1 ? 'Resistencia' : 'Seguridad social'"
class="con-panel-encabezado-vis"
:alto="200"
>
<template #panel-encabezado-vis>
<div>
<p class="vis-titulo-visualizacion">Ejemplo con datos dinámicos</p>
<p class="vis-instruccional">
Da click en el botón para alternar la base de datos
</p>
<button
@click="alternaDatos"
class="boton-chico"
>
Alternar datos
</button>
</div>
</template>
<SisdaiViolines
:datos="datos_dinamicos"
:variables="variables_dinamicas"
:nombre_indice="base === 1 ? 'resistencia' : 'seguridad_social'"
/>
</SisdaiGraficas>
</template>