注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Chart XY ウィジェットは、オブジェクトをインタラクティブなチャートとして可視化するために使用されます。Chart XY ウィジェットを設定するモジュールビルダーは、次のことができます。
以下のスクリーンショットは、Flight Alerts
データを表示する3つの設定済みChart XYウィジェットの例を示しています。
以下の画像では、青い矢印の左に新しく追加された(ただしまだ設定されていない)Chart XY ウィジェットと、その初期設定パネルが表示されています。青い矢印の右にある画像では、Flight Alerts
のバックアップオブジェクトセットがすでに入力された個別の レイヤー 設定パネルが表示されています。
レイヤーの設定は、Chart XY ウィジェットにデータを追加するために必要です。レイヤーには以下の設定オプションが用意されています。
上記で説明したレイヤーの設定オプションに加えて、Chart XY 設定パネルにはいくつかのチャート全体の設定オプションが含まれています。
Function-backed レイヤーの設定には、TwoDimensionalAggregation
または ThreeDimensionalAggregation
を返す関数を記述する必要があります。
以下は、1つの時系列を別の時系列で割ったものをチャートするために、TwoDimensionalAggregation
を返す完全な例です。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
import { Function, TwoDimensionalAggregation, ThreeDimensionalAggregation, IRange, Timestamp } from "@foundry/functions-api"; // @foundry/functions-apiからFunction, TwoDimensionalAggregation, ThreeDimensionalAggregation, // IRange, Timestampをインポートします。 import { ObjectSet, MyObjectType } from "@foundry/ontology-api" // @foundry/ontology-apiからObjectSet, MyObjectTypeをインポートします。 export class TimeseriesAggregations { // TimeseriesAggregationsクラスをエクスポートします。 @Function() // 関数デコレータを使用します。 public async percentOfTotal(objects:ObjectSet<MyObjectType>): Promise<TwoDimensionalAggregation<IRange<Timestamp>>> { // 非同期関数percentOfTotalを定義します。この関数はオブジェクトセットをパラメータとして受け取り、 // 2次元集約(IRange<Timestamp>)のPromiseを返します。 const numerators = await objects.groupBy(e => e.date.byDays()) .sum(e => e.value); // numerators定数には、objectsを日付ごとにグループ化し、それぞれのグループの値の合計を求める結果が格納されます。 const denominators = await objects.groupBy(e => e.date.byDays()) .sum(e => e.total); // denominators定数には、objectsを日付ごとにグループ化し、それぞれのグループの合計を求める結果が格納されます。 return this.divide(numerators, denominators); // divideメソッドを呼び出し、その結果を返します。 } private divide(numerators:TwoDimensionalAggregation<IRange<Timestamp>>, denominators: TwoDimensionalAggregation<IRange<Timestamp>>): TwoDimensionalAggregation<IRange<Timestamp>> { // divideメソッドを定義します。このメソッドは2つの2次元集約をパラメータとして受け取り、 // 2次元集約を返します。 const percentage = numerators.buckets.map((bucket, i) => { const numerator = bucket.value; // 分子をbucket.valueで取得します。 const denominator = denominators.buckets[i].value; // 分母をdenominators.buckets[i].valueで取得します。 if (denominator == 0) { return { key: bucket.key, value: 0 }; // 分母が0の場合は、値を0にして返します。 } return { key: bucket.key, value: numerator / denominator } // 分母が0でない場合は、分子を分母で割った値を返します。 }); return { buckets: percentage }; // 結果をbucketsとして返します。 } }
以下は、segmentBy()
で返される値ごとに別々のシリーズをチャートする ThreeDimensionalAggregation
を返す完全な例です:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
// "@foundry/functions-api"からいくつかのクラスと関数をインポートします import { Function, TwoDimensionalAggregation, ThreeDimensionalAggregation, IRange, Timestamp } from "@foundry/functions-api"; // "@foundry/ontology-api"からObjectSetとMyObjectTypeをインポートします import { ObjectSet, MyObjectType } from "@foundry/ontology-api" // TimeseriesAggregationsクラスをエクスポートします export class TimeseriesAggregations { // Functionデコレータを使用して、percentOfTotalSegmentedメソッドを非同期関数として定義します // この関数は、MyObjectTypeのオブジェクトのセットを受け取り、ThreeDimensionalAggregationを返します @Function() public async percentOfTotalSegmented(objects:ObjectSet<MyObjectType>): Promise<ThreeDimensionalAggregation<IRange<Timestamp>, string>> { // numeratorを計算します(各日付とgroupIdによってオブジェクトをグループ化し、各グループの値の合計を求めます) const numerators = await objects.groupBy(e => e.date.byDays()) .segmentBy(e => e.groupId.topValues()) .sum(e => e.value); // denominatorを計算します(各日付とgroupIdによってオブジェクトをグループ化し、各グループのtotalの合計を求めます) const denominators = await objects.groupBy(e => e.date.byDays()) .segmentBy(e => e.groupId.topValues()) .sum(e => e.total); // numeratorとdenominatorを引数に、divideThreeDimensional関数を呼び出し、その結果を返します return this.divideThreeDimensional(numerators, denominators); } // divideThreeDimensionalメソッドは、2つのThreeDimensionalAggregationを引数に取り、その割り算の結果をThreeDimensionalAggregationとして返します private divideThreeDimensional(numerators:ThreeDimensionalAggregation<IRange<Timestamp>, string>, denominators: ThreeDimensionalAggregation<IRange<Timestamp>, string>): ThreeDimensionalAggregation<IRange<Timestamp>, string> { var percentage = numerators.buckets; // numerators.bucketsをコピーします // numerators.bucketsの全ての要素に対してループを行います for (let i = 0; i < numerators.buckets.length; i++) { // 各バケットの全ての値に対してループを行います for (let j = 0; j < numerators.buckets[i].value.length; j++) { // 各値をそのバケットの対応するdenominatorで割り、その結果をpercentageに保存します percentage[i].value[j].value = numerators.buckets[i].value[j].value / denominators.buckets[i].value[j].value; } } // 計算したpercentageを含むThreeDimensionalAggregationを返します return { buckets: percentage }; } }
さらなる例については、オブジェクトセットの集計とカスタム集計の作成に関する関数のドキュメントを参照してください。