SisdaiAreasApiladas
El componente <SisdaiAreasApiladas/>
permite graficar datos temporales que pertenecen a distintas categorías que, en conjunto, forman una totalidad. Este tipo de gráficas es conocido como “áreas apiladas” o stream graphs en inglés.
Ejemplo de implementación:
<SisdaiGraficas>
<SisdaiAreasApiladas
:datos="datos"
:variables="variables"
:formato_temporal="'%d/%m/%Y'"
:nombre_indice="'nombre_fecha'"
>
</SisdaiAreasApiladas>
</SisdaiGraficas>
API
Propiedades
datos
: Conjunto de datos a visualizar. Consiste en un arreglo de objetos en dónde cada objeto está asociado a una fecha y a los valores muestreados en esa fecha.- Tipo:
Array
- Valor predeterminado:
undefined
- Requerido: Sí
- Tipo:
Ejemplo de
datos
:json[ { "fecha": "01-01-2021", "ags": 100, "bc": 100 }, { "fecha": "01-02-2021", "ags": 80, "bc": 50 }, { "fecha": "01-03-2021", "ags": 20, "bc": 90 }, { "fecha": "01-04-2021", "ags": 20, "bc": 15 } ]
El arreglo mostrado anteriormente puede ser el objeto resultante de la importación de datos mediante la biblioteca D3.js o utilizando complemento (plugin) como plugin-dsv para procesar un archivo .csv con la siguiente estructura equivalente:
Los nombres de las claves en los diccionarios (o las columnas desde el punto de vista de la tabla) no necesariamente deben de coincidir con el ejemplo mostrado. Las propiedades `variables` y `nombre_indice` permiten especificar los nombres de las claves (o columnas) correspondientes.
fecha ags bc 01-01-2021 100 100 01-02-2021 80 50 01-03-2021 20 90 01-04-2021 20 15
variables
: Arreglo de objetos que describen las variables o series de tiempo incluidas en el conjunto de datos.- Tipo:
Array
- Valor predeterminado:
undefined
- Requerido: Sí
- Tipo:
En relación con el ejemplo empleado en
datos
,variables
podría tener la siguiente estructura:
json[ { "id": "ags", "nombre": "Aguascalientes", "color": "pink" }, { "id": "bc", "nombre": "Baja California", "color": "orange" } ]
Esta propiedad incluye un validador que asegura que cada objeto en el arreglo contenga las siguientes tres claves:
id
: su valor es unString
que debe coincidir con alguna subcategoría dedatos
(equivalente a uno de los nombres de las columnas que contienen información numérica).
nombre
: su valor es unString
que proporciona información adicional sobre el id y que puede ser útil para globos de información.
color
: es unString
que define el color de cada categoría, en formato RGB, hexadecimal u otro formato reconocido por CSS.
nombre_indice
: define la clave empleada para identificar la columna temporal. Por defecto es"fecha"
, pero si los datos usan otro nombre, esta propiedad debe especificarse.- Tipo:
String
- Valor predeterminado:
"fecha"
- Requerido: Sí
- Tipo:
formato_temporal
: Especifica el formato temporal de la variable de tiempo. Es un parámetro que se introduce a la función de D3d3.timeParse
y que sirve para transformar un formato de texto a un formato temporal dentro del contexto de JavaScript. En esta documentación se explica cómo especificar formatos para D3.- Tipo:
String
- Valor predeterminado:
"%d-%m-%Y"
- Requerido: Sí
- 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 áreas apiladas"
- 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.creaAreas
: 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 el gráfico de áreas apiladas.
Propiedades expuestas
datos_hover
: propiedad reactiva que se actualiza según la posición del cursor cuando se usa el slotglobo-informacion
.Devuelve unObject
con los datos asociados a la fecha más cercana indicada por el cursor. Generalmente se usa esta propiedad para llenar el componente deSisdaiGraficasGloboInfo
con información.escalaTemporal
: Es la función de D3d3.scaleTime
que se emplea en el eje horizontal. Es útil cuando se desean agregar elementos al gráfico que se basen en la escala temporal.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.conversionTemporal
: Es la función de D3d3.timeParse
que tiene como argumento elformato_temporal
que se haya especificado en las propiedades. Puede ser útil cuando se desea agregar elementos usando laescalaTemporal
y antes de ello los argumentos de dicha escala deben convertirse deString
a un tipo de objetoDate
.
Ejemplos
<template>
<SisdaiGraficas
:titulo_eje_y="'título del eje y'"
:titulo_eje_x="'título del eje x'"
:margenes="{ arriba: 30, abajo: 70, derecha: 30, izquierda: 40 }"
>
<SisdaiAreasApiladas
:datos="[
{ fecha: '01-01-2015', cantidad_1: 100, cantidad_2: 10 },
{ fecha: '01-01-2016', cantidad_1: 80, cantidad_2: 20 },
{ fecha: '01-01-2017', cantidad_1: 50, cantidad_2: 30 },
{ fecha: '01-01-2018', cantidad_1: 100, cantidad_2: 40 },
{ fecha: '01-01-2019', cantidad_1: 80, cantidad_2: 35 },
{ fecha: '01-01-2020', cantidad_1: 40, cantidad_2: 24 },
{ fecha: '01-01-2021', cantidad_1: 70, cantidad_2: 50 },
]"
:variables="[
{
id: 'cantidad_1',
nombre: 'Cantidad 1',
color: 'blue',
},
]"
:nombre_indice="'fecha'"
:angulo_etiquetas_eje_x="-45"
/>
</SisdaiGraficas>
</template>
<script setup>
import { computed, ref } from 'vue'
import datos_consorcio from '../../assets/datos/consorcio_variantes_todas.json'
const lasAreasApiladas = ref()
const datos = ref(datos_consorcio)
const variables = ref([
{ id: 'Omicron', color: '#FFCE00', nombre: 'Omicron' },
{ id: 'Delta', color: '#FA5600', nombre: 'Delta' },
{ id: 'Gamma', color: '#C7690D', nombre: 'Gamma' },
{ id: 'Beta', color: '#FF9F4D', nombre: 'Beta' },
{ id: 'Alpha', color: '#FFAC99', nombre: 'Alpha' },
{ id: 'Mu', color: '#29037B', nombre: 'Mu' },
{ id: 'Lambda', color: '#A359D9', nombre: 'Lambda' },
{
id: 'variantes_restantes',
color: '#bcbcbc',
nombre: 'Variantes restantes',
},
])
const variablesCheckeadas = ref()
const variablesDinamicas = computed(() =>
variablesCheckeadas.value
? variablesCheckeadas.value?.variables_activas
: variables.value
)
</script>
<template>
<SisdaiGraficas
:titulo_eje_y="'título del eje y'"
:titulo_eje_x="'título del eje x'"
:margenes="{ arriba: 10, abajo: 40, derecha: 30, izquierda: 40 }"
>
<template #globo-informacion>
<SisdaiGraficasGloboInfo :ancho="200">
<p>{{ lasAreasApiladas?.datos_hover?.fecha_1 }}</p>
<p>
<span
v-for="(variable, i) in variablesDinamicas"
:key="i"
>
<span
class="globo-informacion-punto-color"
:style="{ background: variable.color }"
></span>
{{ variable.nombre }}:
{{ lasAreasApiladas?.datos_hover?.[variable.id] }}
<br />
</span>
</p>
</SisdaiGraficasGloboInfo>
</template>
<template #panel-encabezado-vis>
<div>
<p class="vis-titulo-visualizacion">
Evolución de variantes del virus SARS-CoV-2
</p>
<p class="vis-fecha-actualizacion">Última actualización: 14/05/2023</p>
</div>
</template>
<SisdaiAreasApiladas
ref="lasAreasApiladas"
:datos="datos"
:variables="variablesDinamicas"
:angulo_etiquetas_eje_x="-45"
:nombre_indice="'fecha_2'"
:formato_temporal="'%d/%m/%Y'"
/>
<template #panel-pie-vis>
<div>
<div class="vis-titulo-leyenda">Variantes del virus SARS-CoV-2</div>
<SisdaiChecks
ref="variablesCheckeadas"
:variables="variables"
></SisdaiChecks>
</div>
</template>
</SisdaiGraficas>
</template>