Skip to content

Radar

一つのデータセットの複数の指標を、二次元のキャンバス上で見比べるためのレーダーチャートです。

使いどころ:一つのデータセットの複数の指標を見比べるレーダーチャートが必要なとき。軸の名前と点数の JSON 配列を abilitys 属性から <r-radar> に渡します。

クイックスタート

基本的な使い方

データは abilitys 属性に JSON 文字列(オブジェクトの配列)として渡します。HTML の属性は文字列しか持てないので、値は妥当な JSON である必要があり、内部で JSON.parse により解析されます。<r-radar> のホストは固有の大きさを持たないので、明示的な幅と高さを与えてください。

html
<r-radar
  style="width:300px;height:300px;display:block;"
  abilitys='[{"abilityName":"HP","scoreRate":"10"},{"abilityName":"攻撃","scoreRate":"90"},{"abilityName":"防御","scoreRate":"20"},{"abilityName":"元素熟知","scoreRate":"50"},{"abilityName":"会心率","scoreRate":"80"},{"abilityName":"会心ダメージ","scoreRate":"50"}]'
></r-radar>

abilitys の JS プロパティから手続き的に設定することもできます。配列(属性へ文字列化して書き戻されます)でも JSON 文字列でも受け付けます。

js
const radar = document.createElement('r-radar');
radar.abilitys = [
  { abilityName: 'HP', scoreRate: 10 },
  { abilityName: '攻撃', scoreRate: 90 },
  { abilityName: '防御', scoreRate: 20 },
];
chart.append(radar);

API リファレンス

プロパティ

プロパティ既定値説明
abilitysstring / Array''チャートのデータ。JSON 文字列(JS プロパティなら配列)
colorPolygonstringvar(--ran-radar-polygon-color) / #e6e6e6同心の網目多角形の色
colorLinestringvar(--ran-radar-line-color) / #e6e6e6軸線と外周の色
fillColorstringrgba(255,121,35,0.60)データ領域の塗りの色
strokeColorstringrgba(255,121,35,0.60)データ領域の輪郭と頂点の点の色
sheetstring''コンポーネントの shadow DOM に注入する CSS

abilitys 配列の各要素は次のキーを受け付けます。

キー必須説明
abilityNamestringはい軸のラベル文字列
scoreRatenumberはいその軸の値。網目の上限は 100 です
backgroundColorstringいいえラベルの背景色(既定は透明)
fontSizenumberいいえラベルの文字サイズ(既定はチャートに合わせた大きさ)
fontColorstringいいえラベルの文字色(既定は --ran-color-text
fontFamilystringいいえラベルの書体(既定は SimHei

メモ:colorPolygoncolorLinefillColorstrokeColor は大文字小文字を区別せずに読まれるので、最初から属性がある場合もマウント後に変えた場合も正しく描画されます。どれを更新してもチャートは描き直されます。テーマに追従させたいときは、下の CSS 変数を優先してください。

チャートのデータ abilitys

ラベルごとのスタイル(backgroundColorfontSizefontColor)は、要素ごとに設定できます。

html
<r-radar
  style="width:300px;height:300px;display:block;"
  abilitys='[{"abilityName":"HP","scoreRate":"10","backgroundColor":"red","fontSize":"30","fontColor":"blue"},{"abilityName":"攻撃","scoreRate":"90"},{"abilityName":"防御","scoreRate":"20"},{"abilityName":"元素熟知","scoreRate":"50"},{"abilityName":"会心率","scoreRate":"80"},{"abilityName":"会心ダメージ","scoreRate":"50"}]'
></r-radar>

網目多角形の色 colorPolygon

html
<r-radar
  style="width:300px;height:300px;display:block;"
  colorPolygon="green"
  abilitys='[{"abilityName":"HP","scoreRate":"10"},{"abilityName":"攻撃","scoreRate":"90"},{"abilityName":"防御","scoreRate":"20"},{"abilityName":"元素熟知","scoreRate":"50"},{"abilityName":"会心率","scoreRate":"80"},{"abilityName":"会心ダメージ","scoreRate":"50"}]'
></r-radar>

軸線の色 colorLine

html
<r-radar
  style="width:300px;height:300px;display:block;"
  colorLine="blue"
  abilitys='[{"abilityName":"HP","scoreRate":"10"},{"abilityName":"攻撃","scoreRate":"90"},{"abilityName":"防御","scoreRate":"20"},{"abilityName":"元素熟知","scoreRate":"50"},{"abilityName":"会心率","scoreRate":"80"},{"abilityName":"会心ダメージ","scoreRate":"50"}]'
></r-radar>

領域の塗りの色 fillColor

html
<r-radar
  style="width:300px;height:300px;display:block;"
  fillColor="red"
  abilitys='[{"abilityName":"HP","scoreRate":"10"},{"abilityName":"攻撃","scoreRate":"90"},{"abilityName":"防御","scoreRate":"20"},{"abilityName":"元素熟知","scoreRate":"50"},{"abilityName":"会心率","scoreRate":"80"},{"abilityName":"会心ダメージ","scoreRate":"50"}]'
></r-radar>

領域の輪郭の色 strokeColor

html
<r-radar
  style="width:300px;height:300px;display:block;"
  strokeColor="blue"
  abilitys='[{"abilityName":"HP","scoreRate":"10"},{"abilityName":"攻撃","scoreRate":"90"},{"abilityName":"防御","scoreRate":"20"},{"abilityName":"元素熟知","scoreRate":"50"},{"abilityName":"会心率","scoreRate":"80"},{"abilityName":"会心ダメージ","scoreRate":"50"}]'
></r-radar>

完全な例データ

HTML の attributestring しか運べないので、渡すデータは json の文字列である必要があり、JSON.parse でオブジェクトの配列に戻されます。JSON の形が崩れていると解析できません。

json
[
  {
    "abilityName": "HP",
    "scoreRate": "10",
    "backgroundColor": "red",
    "fontSize": "30",
    "fontColor": "blue"
  },
  {
    "abilityName": "攻撃",
    "scoreRate": "90"
  },
  {
    "abilityName": "防御",
    "scoreRate": "20"
  },
  {
    "abilityName": "元素熟知",
    "scoreRate": "50"
  },
  {
    "abilityName": "会心率",
    "scoreRate": "80"
  },
  {
    "abilityName": "会心ダメージ",
    "scoreRate": "50"
  }
]

CSS 変数

チャートの色は、ホストの CSS カスタムプロパティからも(テーマに反応する形で)設定できます。

変数既定値説明
--ran-radar-polygon-colorvar(--ran-color-border) / #e6e6e6網目多角形の色
--ran-radar-line-colorvar(--ran-color-border) / #e6e6e6軸線の色
--ran-radar-fill-colorrgba(255,121,35,0.60)データ領域の塗りの色
--ran-radar-stroke-colorrgba(255,121,35,0.60)データ領域の輪郭の色
--ran-radar-width100%キャンバスのコンテナの幅
--ran-radar-height100%キャンバスのコンテナの高さ
--ran-radar-displayblockキャンバスのコンテナの display
--ran-radar-positionrelativeキャンバスのコンテナの position

ラベルの文字色もテーマトークン --ran-color-text にフォールバックするので、ライトでもダークでもラベルは読めるままです。

イベント

ありません。<r-radar> はカスタムイベントを派発しません。

ベストプラクティス

  • 大きさ:ホストは固有の大きさを持ちません。必ず明示的な width / height を(style--ran-radar-width / --ran-radar-height の変数で)設定してください。コンテナのリサイズは ResizeObserver で検知し、チャートは自動で描き直されます。
  • データの形式abilitys には妥当な JSON を渡してください。形の崩れた JSON は記録され、解析できません。スクリプトで実際の配列を扱うときは abilitys の JS プロパティを使います。
  • 尺度scoreRate は固定の最大値 100 に対して測られます。値をその範囲に正規化してください。
  • テーマ:色の属性(colorPolygoncolorLinefillColorstrokeColor)はリアクティブで、マウント後に変えるとチャートを描き直します。色をライト/ダークのテーマに自動で追従させたいときは --ran-radar-* の CSS 変数を優先してください。

MIT ライセンスのもとで公開されています。