SisdaiDona
El componente <SisdaiDona/>
se utiliza para representar la distribución de una totalidad entre diferentes categorías mediante gráficos de dona o pastel. A continuación se detalla su uso y configuración.
Ejemplo de implementación:
<SisdaiGraficas>
<SisdaiDona
:datos="datos"
:variables="variables"
>
</SisdaiDona>
</SisdaiGraficas>
API
Propiedades
datos
: Conjunto de datos a visualizar.Consiste en un arreglo de objetos en dónde cada objeto corresponde a un segmento de la dona y debe incluir una clave asociada al nombre de la categoría y otra clave asociada al número que representa el segmento.- Tipo:
Array
- Valor predeterminado:
undefined
- Requerido: Sí
- Tipo:
Ejemplo de
datos
:json[ { "categoria": "cat_A", "cantidad": 210 }, { "categoria": "cat_B", "cantidad": 120 }, { "categoria": "cat_C", "cantidad": 85 }, { "categoria": "cat_D", "cantidad": 52 } ]
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:
categoria cantidad cat_A 210 cat_B 120 cat_C 85 cat_D 52
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
,nombre_indice
yclave_cantidad
descritas a continuación nos permiten especificar el nombre de las claves (o columnas).
variables
: Arreglo de objetos que contienen información sobre las categorías, como unid
que debe coincidir con los identificadores o nombres que se usan endatos
para cada segmento . También tienen información sobre el color y un nombre que puede ser alternativo al que se usa endatos
:- Tipo:
Array
- Valor predeterminado:
undefined
- Requerido: Sí json
[ { "id": "cat_A", "nombre": "Categoría A", "color": "#FFCE00" }, { "id": "cat_B", "nombre": "Categoría B", "color": "#FA5600" }, { "id": "cat_C", "nombre": "Categoría C", "color": "#C7690D" }, { "id": "cat_D", "nombre": "Categoría D", "color": "#FF9F4D" } ]
Esta propiedad incluye un validador para verificar que todos los objetos contengan las siguientes tres claves:
id
: su valor es unString
y debe coincidir con alguna categoría dedatos
.nombre
: su valor es unString
que proporciona una descripción más detallada sobre el id y que puede ser empleado para globos de informacióncolor
: es unString
que define el color de cada categoría, en formato RGB, hexadecimal u otro formato reconocido por CSS.
- Tipo:
nombre_indice
: especifica la clave que se utiliza para las categorías principales. Por defecto es"categoria"
pero si los datos usan otro nombre, esta propiedad debe especificarse.- Tipo:
String
- Valor predeterminado:
"categoria"
- Requerido: Sí
- Tipo:
clave_cantidad
: Especifica el nombre de la clave empleada para referir la cantidad o valor asociada a cada segmento de la dona u categoría. Por defecto es"cantidad"
y en el ejemplo anterior no tendría que especificarse, pero si endatos
se usará una clave distinta para referir la cantidad, dicha clave tendrá que especificarse aquí.- Tipo:
String
- Valor predeterminado:
"cantidad"
- Requerido: Sí
- Tipo:
radio_interno
:Define el radio interno de la dona, que controla el tamaño del hueco central. Es un valor numérico entre 0 y 0.5. Si se establece en 0, se obtendrá una gráfica de pastel.- Tipo:
Number
- Valor predeterminado:
0.18
- Requerido: No
- Tipo:
radio_externo
: Define el radio externo de la dona y debe ser mayor que el radio interno. Es un valor numérico entre 0 y 0.5. Ambas propiedades en conjunto sirven para calibrar el grosor y tamaño de la dona.- Tipo:
Number
- Valor predeterminado:
0.32
- Requerido: No
- Tipo:
variables_visibles
: Arreglo opcional que especifica qué segmentos (identificador porid
) serán mostrados en el gráfico. Los segmentos que no estén incluidos en el arreglo, no se visualizarán.- Tipo:
Array
- Valor predeterminado:
undefined
- Requerido: No
- Tipo:
color_dona_fondo
: Especifica el color de fondo de la dona para las áreas no asignadas a ningún segmento. Por defecto utiliza la variable de sisdai-css"var(--fondo)"
, pero se puede definir cualquier formato de color admitido por CSS.- Tipo:
String
- Valor predeterminado:
"var(--fondo)"
- 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 dona"
- Requerido: No
- Tipo:
Ejemplos
<script setup>
import { ref } from 'vue'
const laDona = ref()
const variables = ref([
{ id: 'fut', nombre: 'Futbol', color: '#fb4c56' },
{ id: 'natacion', nombre: 'Natación', color: '#023b88' },
{ id: 'basquet', nombre: 'Básquetbol', color: '#19a7ac' },
{ id: 'ciclismo', nombre: 'Ciclismo', color: '#046b4f' },
{ id: 'box', nombre: 'Boxeo', color: '#f9af05' },
])
const laGrafica = ref()
</script>
<template>
<SisdaiGraficas
:margenes="{ arriba: 0, abajo: 0, derecha: 0, izquierda: 0 }"
ref="laGrafica"
>
<template #globo-informacion>
<SisdaiGraficasGloboInfo :ancho="216">
<p>
<span
class="globo-informacion-punto-color"
:style="{
background: variables.filter(
d => d.id === laDona?.datos_hover?.categoria
)[0]?.color,
}"
></span
>{{
variables.filter(d => d.id === laDona?.datos_hover?.categoria)[0]
?.nombre
}}: {{ laDona?.datos_hover?.cantidad }} |
{{ laDona?.datos_hover?.porcentaje }} %
</p>
</SisdaiGraficasGloboInfo>
</template>
<template #panel-encabezado-vis>
<div>
<p class="vis-titulo-visualizacion">
Actividades deportivas realizadas por estudiantes de secundaria
</p>
<p class="vis-fecha-actualizacion">Última actualización: 14/05/2023</p>
<p class="vis-instruccional">
Se presentan las cinco actividades deportivas más practicadas por
estudiantes de secundaria en su tiempo libre. Pasa el cursor por
encima de cada segmento para conocer el detalle.
</p>
</div>
</template>
<SisdaiDona
ref="laDona"
:datos="[
{ categoria: 'fut', cantidad: 93 },
{ categoria: 'natacion', cantidad: 52 },
{ categoria: 'basquet', cantidad: 31 },
{ categoria: 'ciclismo', cantidad: 24 },
{ categoria: 'box', cantidad: 12 },
]"
:variables="variables"
:nombre_indice="'categoria'"
/>
<template #panel-pie-vis>
<div>
<div v-if="laGrafica?.vistaActiva === 'grafica'">
<p class="vis-titulo-leyenda">Actividades deportivas</p>
<SisdaiNomenclatura :variables="variables"></SisdaiNomenclatura>
</div>
<p class="vis-fuente">
Fuente: Los datos que se visualizan en este gráfico son hipotéticos
</p>
</div>
</template>
</SisdaiGraficas>
</template>
<script setup>
import { ref, watch } from 'vue'
import datos_donas_1 from '../../assets/datos/donas_1.json'
import datos_donas_2 from '../../assets/datos/donas_2.json'
import datos_donas_3 from '../../assets/datos/donas_3.json'
datos_donas_2
datos_donas_3
const contador = ref(0)
const variables_1 = [
{ id: 'Variable A', color: '#FFCE00', nombre: 'Var A' },
{ id: 'Variable B', color: '#FA5600', nombre: 'Var B' },
{ id: 'Variable C', color: '#C7690D', nombre: 'Var C' },
{ id: 'Variable D', color: '#FF9F4D', nombre: 'Var D' },
{ id: 'Variable E', color: '#FFAC99', nombre: 'Var E' },
]
const variables_2 = [
{ id: 'Categoría A', color: '#253494', nombre: 'cat A' },
{ id: 'Categoría B', color: '#2c7fb8', nombre: 'cat B' },
{ id: 'Categoría C', color: '#41b6c4', nombre: 'cat C' },
{ id: 'Categoría D', color: '#7fcdbb', nombre: 'cat D' },
]
const variables_3 = [
{ id: 'Categoría 1', color: '#FFCE00', nombre: 'Var 1' },
{ id: 'Categoría 2', color: '#FA5600', nombre: 'Var 2' },
{ id: 'Categoría 3', color: '#C7690D', nombre: 'Var 3' },
]
const datos = ref(datos_donas_1)
const variables = ref(variables_1)
watch(contador, nv => {
if (nv === 0) {
datos.value = datos_donas_1
variables.value = variables_1
} else if (nv === 1) {
datos.value = datos_donas_2
variables.value = variables_2
} else {
datos.value = datos_donas_3
variables.value = variables_3
}
})
</script>
<template>
<SisdaiGraficas
:margenes="{ arriba: 10, abajo: 10, derecha: 10, izquierda: 10 }"
>
<template #panel-encabezado-vis>
<div>
<p class="vis-titulo-visualizacion">Ejemplo de donas</p>
<button
class="boton-chico"
@click="contador = (contador + 1) % 3"
>
Cambia datos y variables
</button>
</div>
</template>
<SisdaiDona
:datos="datos"
:variables="variables"
:nombre_indice="'categoria'"
/>
</SisdaiGraficas>
</template>