注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Chart XY ウィジェットが希望する機能やフォーマットを実現できない場合は、Vega Chart ウィジェットの使用を検討してください。
Chart XY ウィジェットは、オブジェクトをインタラクティブなチャートとして視覚化するために使用されます。モジュールビルダーは、Chart XY ウィジェットを設定することで以下のことができます:
以下のスクリーンショットは、Flight Alerts
データを表示する3つの設定された Chart XY ウィジェットの例を示しています:
以下の画像では、青い矢印の左側に新しく追加された(まだ設定されていない)Chart XY ウィジェットとその初期設定パネルが表示されています。青い矢印の右側には、Flight Alerts
のバックオブジェクトセットが既に入力されている個々の レイヤー 設定パネルが表示されています:
レイヤーを設定することで、Chart XY ウィジェットにデータを追加することができます。レイヤーには以下の設定オプションがあります:
上記のレイヤー設定オプションに加えて、主な Chart XY 設定パネルにはいくつかのチャート全体の設定オプションがあります:
関数バックのレイヤーを設定するには、TwoDimensionalAggregation
または ThreeDimensionalAggregation
を返す関数を記述する必要があります。
以下は、あるタイムシリーズを別のタイムシリーズで割るための 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
import { Function, TwoDimensionalAggregation, ThreeDimensionalAggregation, IRange, Timestamp } from "@foundry/functions-api"; import { ObjectSet, MyObjectType } from "@foundry/ontology-api" export class TimeseriesAggregations { @Function() public async percentOfTotal(objects:ObjectSet<MyObjectType>): Promise<TwoDimensionalAggregation<IRange<Timestamp>>> { const numerators = await objects.groupBy(e => e.date.byDays()) .sum(e => e.value); const denominators = await objects.groupBy(e => e.date.byDays()) .sum(e => e.total); return this.divide(numerators, denominators); } private divide(numerators:TwoDimensionalAggregation<IRange<Timestamp>>, denominators: TwoDimensionalAggregation<IRange<Timestamp>>): TwoDimensionalAggregation<IRange<Timestamp>> { const percentage = numerators.buckets.map((bucket, i) => { const numerator = bucket.value; const denominator = denominators.buckets[i].value; if (denominator == 0) { return { key: bucket.key, value: 0 }; } return { key: bucket.key, value: numerator / denominator } }); return { buckets: percentage }; } }
以下は、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
import { Function, TwoDimensionalAggregation, ThreeDimensionalAggregation, IRange, Timestamp } from "@foundry/functions-api"; import { ObjectSet, MyObjectType } from "@foundry/ontology-api" export class TimeseriesAggregations { @Function() public async percentOfTotalSegmented(objects:ObjectSet<MyObjectType>): Promise<ThreeDimensionalAggregation<IRange<Timestamp>, string>> { const numerators = await objects.groupBy(e => e.date.byDays()) .segmentBy(e => e.groupId.topValues()) .sum(e => e.value); const denominators = await objects.groupBy(e => e.date.byDays()) .segmentBy(e => e.groupId.topValues()) .sum(e => e.total); return this.divideThreeDimensional(numerators, denominators); } private divideThreeDimensional(numerators:ThreeDimensionalAggregation<IRange<Timestamp>, string>, denominators: ThreeDimensionalAggregation<IRange<Timestamp>, string>): ThreeDimensionalAggregation<IRange<Timestamp>, string> { var percentage = numerators.buckets; //copy for (let i = 0; i < numerators.buckets.length; i++) { for (let j = 0; j < numerators.buckets[i].value.length; j++) { percentage[i].value[j].value = numerators.buckets[i].value[j].value / denominators.buckets[i].value[j].value; } } return { buckets: percentage }; } }
詳細な例については、オブジェクトセット集計 と カスタム集計の作成 に関する関数のドキュメントを参照してください。