[Wijmo入門]Gaugeコントロールの使い方 – 基本機能編 –

Wijmo(ウィジモ)」は業務アプリケーションの様々な要件に対応できるUI部品を備えたJavaScriptライブラリです。

Wijmoには、線形や円形のゲージを表示できる「Gauge(ゲージ)」コントロールが含まれています。この記事では、Gaugeコントロールを使って線形ゲージ、ブレットグラフ、円形ゲージの3種類のゲージを作成する方法を紹介します。

開発環境の準備とWijmoの参照

この記事では以下の開発環境を使用します。

作成するファイルは次の7つです。

page1.htmlページ本体。ページの要素としてGaugeコントロール(線形ゲージ)を配置します
page2.htmlページ本体。ページの要素としてGaugeコントロール(ブレットグラフ)を配置します
page3.htmlページ本体。ページの要素としてGaugeコントロール(円形ゲージ)を配置します
page1.jsGaugeコントロール(線形ゲージ)を作成するコードを記載します
page2.jsGaugeコントロール(ブレットグラフ)を作成するコードを記載します
page3.jsGaugeコントロール(円形ゲージ)を作成するコードを記載します
styles.css各種ページ要素のスタイル定義を記載します

ページ上の要素のスタイルを以下のように「styles.css」で定義します。

#gauge1{
    height: 2em;
    width: 600px;
    margin-left: 20px;
    margin-top: 80px;
}
#gauge2{
    width: 600px;
    margin-left: 20px;
    margin-top: 100px;
}
#gauge3{
    height: 240px;
    width: 600px;
    margin-left: 20px;
    margin-top: 20px;
}

線形ゲージを作成する

それでは「page1.html」と「page1.js」に次のようなコードを記述してGaugeコントロールを作成しましょう。ここでは3種類のゲージの中から、線形ゲージを表示する方法を紹介します。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>線形ゲージ</title>
    <link rel="stylesheet" type="text/css" href="css/wijmo.min.css" />
    <link rel="stylesheet" type="text/css" href="css/styles.css">
    <script src="scripts/wijmo.min.js"></script>
    <script src="scripts/wijmo.gauge.min.js"></script>
    <script src="scripts/cultures/wijmo.culture.ja.min.js"></script>
    <script src="scripts/page1.js"></script>
</head>
<body>
    <div>
        <label>線形ゲージの方向: </label>
        <select id="direction">
            <option value="Left">左へ増加</option>
            <option value="Right" selected>右へ増加</option>
            <option value="Up">上へ増加</option>
            <option value="Down">下へ増加</option>
        </select>
        </br></br>
    </div>
    <div id="gauge1"></div>
</body>
</html>
document.addEventListener("DOMContentLoaded", function () {
    InitializeGauge()
});

function InitializeGauge(){
    // 線形ゲージの基本設定
    const linearGauge = new wijmo.gauge.LinearGauge('#gauge1', {
        min: 0,
        max: 100,
        value: 75,
        step: 1,
        isAnimated: true,
        isReadOnly: false,
        showRanges: false,
        showText: 'All',
        ranges: [
            { min: 0, max: 30, color: 'red' },
            { min: 30, max: 70, color: 'gold' },
            { min: 70, max: 100, color: 'green' },
        ]
    });

    // 線形ゲージ方向の切り替え
    document.querySelector('#direction').addEventListener('change', e => {
        switch(document.querySelector('#direction').value){
            case 'Left':
                linearGauge.direction = 'Left';
                linearGauge.hostElement.style.height = '2em';
                linearGauge.hostElement.style.width = '600px';
                linearGauge.hostElement.style.marginTop = '80px';
                linearGauge.hostElement.style.marginLeft = '20px';
                break;
            case 'Right':
                linearGauge.direction = 'Right';
                linearGauge.hostElement.style.height = '2em';
                linearGauge.hostElement.style.width = '600px';
                linearGauge.hostElement.style.marginTop = '80px';
                linearGauge.hostElement.style.marginLeft = '20px';
                break;
            case 'Up':
                linearGauge.direction = 'Up';
                linearGauge.hostElement.style.height = '240px';
                linearGauge.hostElement.style.width = '2em';
                linearGauge.hostElement.style.marginTop = '-30px';
                linearGauge.hostElement.style.marginLeft = '100px';
                break;
            case 'Down':
                linearGauge.direction = 'Down';
                linearGauge.hostElement.style.height = '240px';
                linearGauge.hostElement.style.width = '2em';
                linearGauge.hostElement.style.marginTop = '-30px';
                linearGauge.hostElement.style.marginLeft = '100px';
                break;
        }
    });
}

LinearGaugeクラスのコンストラクタ内で設定しているプロパティは、線形ゲージ以外のゲージにも共通しています。それぞれの機能を以下に示します。

プロパティ名説明
minゲージに表示できる最小値
maxゲージに表示できる最大値
valueゲージに表示される値
step「value」プロパティを増減する量
isAnimated値変更時のアニメーションの有無
isReadOnly値編集の可否
showRanges「ranges」プロパティに含まれる範囲の表示/非表示
showText表示するテキストの種類
ranges独自のゾーンを指定する範囲のコレクション

「select」タグの「change」イベントで設定している「direction」プロパティは線形ゲージだけの機能で、値を増加する方向を指定します。設定値と増加方向は次のとおりです。

プロパティ値説明
Left右から左へ増加
Right左から右へ増加
Up下から上へ増加
Down上から下へ増加

作成したページを表示すると次のようになります。

線形ゲージ(右へ増加)

また、マウスでゲージを変化させると、「value」プロパティの値が「ranges」コレクションで指定したどの範囲に含まれるかによって、ゲージの色が変化します。

線形ゲージ(右へ増加)(2)
線形ゲージ(右へ増加)(3)

「select」タグで「上へ増加」を選択すると下の図のようになります。このとき、次の2つのプロパティも同時に変更することで横向きのゲージを適切に縦向きにしています。

  • hostElement.style.height
  • hostElement.style.width
線形ゲージ(上へ増加)

ブレットグラフを作成する

次に線形ゲージとよく似たブレットグラフを作成します。

ブレットグラフには、現在の値とターゲット値を表示できるほか、現在の値が良好か不良かを識別するための範囲を設定することもできます。ブレットグラフに特有な機能は次のとおりです。

プロパティ名説明
bad値が不良と見なされる基準値
good値が良好と見なされる基準値
target目標値

これらのプロパティの値を分かりやすく表示するには「showRanges」プロパティを「true」に設定しておく必要があります。このプロパティが「false」のときには、「value」プロパティが上記のプロパティの値を超えるたびにゲージの色が変化するだけなので、各プロパティの設定値がどこにあるのか確認しづらくなります。

ブレットグラフを表示するための「page2.html」と「page2.js」は次のようになります。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>ブレットグラフ</title>
    <link rel="stylesheet" type="text/css" href="css/wijmo.min.css" />
    <link rel="stylesheet" type="text/css" href="css/styles.css">
    <script src="scripts/wijmo.min.js"></script>
    <script src="scripts/wijmo.gauge.min.js"></script>
    <script src="scripts/cultures/wijmo.culture.ja.min.js"></script>
    <script src="scripts/page2.js"></script>
</head>
<body>
    <div id="gauge2"></div>
</body>
</html>
document.addEventListener("DOMContentLoaded", function () {
    InitializeGauge()
});

function InitializeGauge(){
    // ブレットグラフの基本設定
    const bulletGauge = new wijmo.gauge.BulletGraph('#gauge2', {
        min: 0,
        max: 100,
        value: 75,
        step: 1,
        bad: 30,
        good: 60,
        target: 80,
        isAnimated: true,
        isReadOnly: false,
        showRanges: true,
        showText: 'All'
    });
}

このページを表示すると次のようなブレットグラフになります。

ブレットグラフ

円形ゲージを作成する

円形ゲージはドーナッツチャートから一部のセグメントを切り出したような形をしています。 円形ゲージ特有の機能は、次のプロパティで設定します。

プロパティ名説明
startAngleゲージの開始角度
sweepAngleゲージの開始から終末までの角度
autoScaleゲージの自動的な拡大縮小目標値

ここでは「showRanges」プロパティを「true」に設定して「ranges」プロパティで設定したゾーンを表示します。そして「pointer」プロパティが参照する「range」クラスの「thickness」プロパティを使ってゲージの幅を狭くしてゾーンを見やすくしています。

円形ゲージを表示する「page3.html」と「page3.js」は次のとおりです。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>円形ゲージ</title>
    <link rel="stylesheet" type="text/css" href="css/wijmo.min.css" />
    <link rel="stylesheet" type="text/css" href="css/styles.css">
    <script src="scripts/wijmo.min.js"></script>
    <script src="scripts/wijmo.gauge.min.js"></script>
    <script src="scripts/cultures/wijmo.culture.ja.min.js"></script>
    <script src="scripts/page3.js"></script>
</head>
<body>
    <div id="gauge3"></div>
</body>
</html>
document.addEventListener("DOMContentLoaded", function () {
    InitializeGauge()
});

function InitializeGauge(){
    // 円形ゲージの基本設定
    const radialGauge = new wijmo.gauge.RadialGauge('#gauge3', {
        min: 0,
        max: 100,
        value: 75,
        step: 1,
        isAnimated: true,
        isReadOnly: false,
        showRanges: true,
        showText: 'All',
        pointer: {
            thickness: 0.4,
            color: 'steelblue'
        },
        ranges: [
            { min: 0, max: 30, color: 'lightpink' },
            { min: 30, max: 70, color: 'lightyellow' },
            { min: 70, max: 100, color: 'lightgreen' },
        ],
        startAngle: 90,
        sweepAngle: 270,
        autoScale: false
    });
}

作成したページは次のようになります。

円形ゲージ

今回ご紹介した各種設定は以下のデモアプリケーションでも確認できます(“Run Project”をクリックするとデモが起動します)。

Gaugeコントロールの利用については以下のドキュメントも用意していますので、ここで紹介できなかった機能については、これらのドキュメントを参照していただければと思います。

さいごに

今回はWijmoに含まれているGaugeコントロールの基本的な使用方法を紹介いたしました。Wijmoには、Gaugeコントロールの他にもFlexChart、FlexMap、FinancialChartなどの多様なコントロールが用意されています。さまざまなアプリケーションに最適なデータ可視化機能を提供するこれらのコントロールをぜひご検討いただけますと幸いです。

この他にもWijmoの各種コントロールの基本的な使い方や応用的な使い方の解説を連載記事として公開しています。こちらも是非ご覧ください。

製品サイトでは、Wijmoの機能を手軽に体験できるデモアプリケーションやトライアル版も公開しておりますので、こちらもご確認ください。

また、ご導入前の製品に関するご相談、ご導入後の各種サービスに関するご質問など、お気軽にお問合せください。

\  この記事をシェアする  /