Skip to content

Radar

Gráfico de radar para comparar varias métricas de un mismo conjunto de datos sobre un lienzo bidimensional.

Úsalo cuando necesites un gráfico de radar o de araña para comparar varias métricas de un conjunto de datos. Pásale a <r-radar> un array JSON de nombres de eje y puntuaciones mediante el atributo abilitys.

Inicio rápido

Uso básico

Los datos se pasan por el atributo abilitys como una cadena JSON (un array de objetos). Como los atributos HTML solo pueden contener cadenas, el valor tiene que ser JSON válido; se analiza internamente con JSON.parse. El host <r-radar> no tiene tamaño propio, así que dale un ancho y un alto explícitos.

html
<r-radar
  style="width:300px;height:300px;display:block;"
  abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defensa","scoreRate":"20"},{"abilityName":"Maestría elemental","scoreRate":"50"},{"abilityName":"Prob. de crítico","scoreRate":"80"},{"abilityName":"Daño crítico","scoreRate":"50"}]'
></r-radar>

También puedes definir los datos de forma imperativa por la propiedad JS abilitys, que acepta un array (se convierte a cadena de vuelta al atributo) o una cadena JSON:

js
const radar = document.createElement('r-radar');
radar.abilitys = [
  { abilityName: 'Vida', scoreRate: 10 },
  { abilityName: 'Ataque', scoreRate: 90 },
  { abilityName: 'Defensa', scoreRate: 20 },
];
chart.append(radar);

Referencia de la API

Propiedades

PropiedadTipoPor defectoDescripción
abilitysstring / Array''Datos del gráfico como cadena JSON (o array por la propiedad JS)
colorPolygonstringvar(--ran-radar-polygon-color) / #e6e6e6Color de los polígonos concéntricos de la rejilla
colorLinestringvar(--ran-radar-line-color) / #e6e6e6Color de los ejes y del borde exterior
fillColorstringrgba(255,121,35,0.60)Color de relleno de la región de datos
strokeColorstringrgba(255,121,35,0.60)Color del contorno de la región y de los puntos de vértice
sheetstring''CSS inyectado en el shadow DOM del componente

Cada entrada del array abilitys admite estas claves:

ClaveTipoObligatoriaDescripción
abilityNamestringTexto de la etiqueta del eje
scoreRatenumberValor en ese eje; la rejilla llega como máximo a 100
backgroundColorstringNoColor de fondo de la etiqueta (por defecto transparente)
fontSizenumberNoTamaño de letra de la etiqueta (por defecto, escalado al gráfico)
fontColorstringNoColor del texto de la etiqueta (por defecto --ran-color-text)
fontFamilystringNoFamilia tipográfica de la etiqueta (por defecto SimHei)

Nota: colorPolygon, colorLine, fillColor y strokeColor se leen sin distinguir mayúsculas, así que se dibujan bien tanto si el atributo está desde el principio como si cambia tras el montaje; actualizar cualquiera de ellos vuelve a dibujar el gráfico. Para un estilo que siga el tema, prefiere las variables CSS de más abajo.

Datos del gráfico abilitys

El estilo de la etiqueta por eje (backgroundColor, fontSize, fontColor) se puede definir en entradas concretas:

html
<r-radar
  style="width:300px;height:300px;display:block;"
  abilitys='[{"abilityName":"Vida","scoreRate":"10","backgroundColor":"red","fontSize":"30","fontColor":"blue"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defensa","scoreRate":"20"},{"abilityName":"Maestría elemental","scoreRate":"50"},{"abilityName":"Prob. de crítico","scoreRate":"80"},{"abilityName":"Daño crítico","scoreRate":"50"}]'
></r-radar>

Color de la rejilla colorPolygon

html
<r-radar
  style="width:300px;height:300px;display:block;"
  colorPolygon="green"
  abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defensa","scoreRate":"20"},{"abilityName":"Maestría elemental","scoreRate":"50"},{"abilityName":"Prob. de crítico","scoreRate":"80"},{"abilityName":"Daño crítico","scoreRate":"50"}]'
></r-radar>

Color de los ejes colorLine

html
<r-radar
  style="width:300px;height:300px;display:block;"
  colorLine="blue"
  abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defensa","scoreRate":"20"},{"abilityName":"Maestría elemental","scoreRate":"50"},{"abilityName":"Prob. de crítico","scoreRate":"80"},{"abilityName":"Daño crítico","scoreRate":"50"}]'
></r-radar>

Relleno de la región fillColor

html
<r-radar
  style="width:300px;height:300px;display:block;"
  fillColor="red"
  abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defensa","scoreRate":"20"},{"abilityName":"Maestría elemental","scoreRate":"50"},{"abilityName":"Prob. de crítico","scoreRate":"80"},{"abilityName":"Daño crítico","scoreRate":"50"}]'
></r-radar>

Contorno de la región strokeColor

html
<r-radar
  style="width:300px;height:300px;display:block;"
  strokeColor="blue"
  abilitys='[{"abilityName":"Vida","scoreRate":"10"},{"abilityName":"Ataque","scoreRate":"90"},{"abilityName":"Defensa","scoreRate":"20"},{"abilityName":"Maestría elemental","scoreRate":"50"},{"abilityName":"Prob. de crítico","scoreRate":"80"},{"abilityName":"Daño crítico","scoreRate":"50"}]'
></r-radar>

Datos de ejemplo completos

Como un attribute de HTML solo puede llevar una string, los datos que le pases tienen que ser una cadena json, que se convierte de nuevo en un array de objetos con JSON.parse; un JSON mal formado no se puede analizar:

json
[
  {
    "abilityName": "Vida",
    "scoreRate": "10",
    "backgroundColor": "red",
    "fontSize": "30",
    "fontColor": "blue"
  },
  {
    "abilityName": "Ataque",
    "scoreRate": "90"
  },
  {
    "abilityName": "Defensa",
    "scoreRate": "20"
  },
  {
    "abilityName": "Maestría elemental",
    "scoreRate": "50"
  },
  {
    "abilityName": "Prob. de crítico",
    "scoreRate": "80"
  },
  {
    "abilityName": "Daño crítico",
    "scoreRate": "50"
  }
]

Variables CSS

Los colores del gráfico también se pueden definir (de forma reactiva al tema) mediante propiedades personalizadas de CSS en el host:

VariablePor defectoDescripción
--ran-radar-polygon-colorvar(--ran-color-border) / #e6e6e6Color de la rejilla
--ran-radar-line-colorvar(--ran-color-border) / #e6e6e6Color de los ejes
--ran-radar-fill-colorrgba(255,121,35,0.60)Relleno de la región de datos
--ran-radar-stroke-colorrgba(255,121,35,0.60)Contorno de la región de datos
--ran-radar-width100%Ancho del contenedor del lienzo
--ran-radar-height100%Alto del contenedor del lienzo
--ran-radar-displayblockdisplay del contenedor del lienzo
--ran-radar-positionrelativeposition del contenedor del lienzo

El color del texto de las etiquetas también recurre al token de tema --ran-color-text, así que se leen bien en modo claro y oscuro.

Eventos

Ninguno. <r-radar> no despacha eventos personalizados.

Buenas prácticas

  • Dimensionado: el host no tiene tamaño propio; define siempre un width/height explícito (con style o con las variables --ran-radar-width/--ran-radar-height). El gráfico se redibuja solo al cambiar el tamaño del contenedor, mediante un ResizeObserver.
  • Formato de los datos: pasa JSON válido en abilitys; un JSON mal formado se registra y no se puede analizar. Usa la propiedad JS abilitys cuando trabajes con arrays de verdad desde código.
  • Escala: scoreRate se mide contra un máximo fijo de 100; normaliza tus valores a ese rango.
  • Temas: los atributos de color (colorPolygon, colorLine, fillColor, strokeColor) son reactivos y redibujan el gráfico al cambiarlos tras el montaje. Prefiere las variables CSS --ran-radar-* cuando quieras que los colores sigan solos el tema claro u oscuro.

Publicado bajo la licencia MIT.