BarLayer (クラス)
public BarLayer {inherits StackableChartLayer}
パッケージ: CURL.GUI.CHARTS

棒を使用してデータ系列をプロットする ChartLayer の実装。

説明

既定では、BarLayer.y-axis-data の各メンバ内のそれぞれのレコードについて、BarLayerRectangleShape を生成します。生成された ShapeBarLayer.series-shapes で見つかります。
Shape の外観と動作はいくつかの方法でカスタマイズできます。最も簡単な方法はオプションを使用することです。他のグラフ コンポーネントの場合と同様、Shape は、それがある場所またはその上のどこにでも非ローカル オプション セットを使用して制御することができます。たとえば、bar-border-width を設定すれば、四角形の境界線の太さを変更できます。
また、BarLayer.shape-factory を使用すれば、Shape の作成プロセスをオーバーライドすることもできます。これは非常に用途の広い手法です。これを使用すれば、個々の Shape のオプション値を変更したり、ShapeTooltip を提供したり、まったく種類の異なる Shape を一緒に生成したりさえできます。
これは、ChartLayer の標準実装の 1 つです。他の標準実装の一覧、および LayeredChart システムの詳細については、LayeredChart を参照してください。

注意事項

重要: 正しくプロットするために、BarLayer には特殊なタイプの X 軸オブジェクトが必要です。余分の目盛りの作成、および、目盛りにではなく目盛り間のデータ ポイントの位置付けが必要になるためです。これを行うタイプの軸には EnumeratedBarChartAxis (データ ベース) と DefaultBarChartAxis (レコード インデックス ベース) があります。
既定では、BarLayer.maybe-create-x-axis によってこれらのいずれかが自動的に作成されます。しかし、場合によっては、これが行われません。X 軸を手動で設定する場合は、BarLayer.maybe-create-x-axis を完全に回避します。あるいは、この ChartLayer が行う前に、LayeredChart.layers 内の別の ChartLayer が X 軸を作成すると、X 軸は作成されません。
こうした場合、X 軸を直接制御する必要があります。独自にこの軸を作成して、適切な軸スロットに割り当てることができます (たとえば、LayeredChart.bottom-axis)。次の例はこのことを示しています。必要であれば、代わりに LayeredChart.x-axis-factory を使用して、自動作成プロセスを制御できます。
次の非ローカル オプションは、特に BarLayer に関連しています。
グラフへのその他のオブジェクトの追加については、ChartLayer を参照してください。
このオブジェクトは、"BarLayer"のスタイル ルールを記述することによってスタイル化することが出来ます。


{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
    location = "../docstring-support/gui/charts-doc.scurl"
}

{define-proc package {h-gradient
                         start-color:FillPattern,
                         highlight-color:FillPattern,
                         end-color:FillPattern,
                         highlight-pos:double = 0.2
                     }:FillPattern
    {return
        {LinearGradientFillPattern
            {Fraction2d 0, 0},
            {Fraction2d 1, 0},
            {Spectrum.from-envelope
                start-color,
                0.0,
                highlight-color,
                highlight-pos,
                end-color,
                1.0
            }
        }
    }
}

{let chart:LayeredChart =
    {LayeredChart
        width = 15cm,
        height = 6cm,
        color-palette =
            {new {Array-of FillPattern},
                {h-gradient "gray", "white", "gray"},
                {h-gradient "blue", "lavender", "steelblue"},
                {h-gradient "red", "mistyrose", "crimson"},
                {h-gradient "purple", "lavender", "blueviolet"},
                {h-gradient "lime", "mintcream", "green"}
            },
        bar-border-width = 2px,
        bottom-axis =
            {EnumeratedBarChartAxis
                {ChartDataSeries sample-records, "Name"}
            },
        {BarLayer
            sample-records,
            "Age",
            "Points",
            shape-factory =
                {proc {layer:BarLayer,
                       rectangle:GRect,
                       record:Record,
                       record-index:int,
                       series-index:int,
                       border-width:any,
                       border-line-style:LineStyle
                      }:Shape
                    let constant stock-shape:Shape =
                        {BarLayer.default-shape-factory
                            layer,
                            rectangle,
                            record,
                            record-index,
                            series-index,
                            border-width,
                            border-line-style
                        }
                    
                    {stock-shape.add-event-handler
                        {on PointerEnter at s:Shape do
                            set s.border-color = FillPattern.yellow
                        }
                    }
                    {stock-shape.add-event-handler
                        {on PointerLeave at s:Shape do
                            {unset s.border-color}
                        }
                    }
                    {return stock-shape}
                }
        }
    }
}

{Canvas
    width = chart.width,
    height = chart.height,
    chart
}

{RadioFrame
    {HBox
        spacing = 4pt,
        {RadioButton radio-value = ChartStackingMode.none, value = true},
        {RadioButton radio-value = ChartStackingMode.stacked},
        {RadioButton radio-value = ChartStackingMode.percent}
    },
    {on ValueFinished at rf:RadioFrame do
        let constant layer:BarLayer = chart.layers[0] asa BarLayer
        set layer.stacking-mode = rf.value asa ChartStackingMode
    }
}

コンストラクタ
default:新規の BarLayer を作成します。
コンストラクタ public {BarLayer.default
x-axis-data:#ChartDataSeries = null,
stacking-mode:ChartStackingMode = ChartStackingMode.none,
shape-factory:BarLayer.ShapeFactory = BarLayer.default-shape-factory,
...
}

プロパティ
bar-border-line-style:この BarLayer 内の棒の境界の LineStyle
非ローカル オプション public BarLayer.bar-border-line-style:LineStyle
bar-border-width:この BarLayer 内の棒の境界幅。
非ローカル オプション public BarLayer.bar-border-width:any
bar-spacing:棒クラスタの間隔。
非ローカル オプション public BarLayer.bar-spacing:double
series-shapes:この BarLayer のプロットを表す Shape を含む配列。
フィールド public constant BarLayer.series-shapes:{Array-of Shape} ={new {Array-of Shape}}
shape-factory:この BarLayer 内の各プロット Shape を生成するために使用されるファクトリ プロシージャ。
アクセサ public BarLayer.shape-factory:BarLayer.ShapeFactory
セッター public BarLayer.shape-factory:BarLayer.ShapeFactory
style-element:スタイリングの目的のための、この Visual の "要素" や "型" です。
アクセサ public BarLayer.style-element:String
プロパティ 継承 StackableChartLayer: generate-y-axes?, stacking-mode
プロパティ 継承 ChartLayer: chart, color-associations, legend-enabled?, legend-entry-factory, x-axis-data, y-axis-data
プロパティ 継承 Shape: as-Shape, border-color, color, draw-operation, graphical-parent, option-parent, possibly-displayed?, selection-context, shape-parent, shape-selectable, stroke-thickness, transformation, visible?
プロパティ 継承 ShapeContainerBase: as-ShapeRoot, shape-children
プロパティ 継承 Visual: _style-element, clonable-class?, completely-clonable-children?, cursor, data-source, display-context, dragee, font-size, has-key-focus?, input-method-enabled?, input-method-keyboard-mode, name, options, style-class, style-manager, style-options, test-child?, test-description, test-name, test-parent?, test-type-name, test-visible?, tooltip, user-data, visual-parent
プロパティ 継承 DataBindingTarget: data-binding-context, data-bindings
プロパティ 継承 EventTarget: event-handlers
プロパティ 継承 OptionListInterface: option-register-proc, options-present-here, registered-option-keys

クラス変数と定数
ShapeFactory:BarLayer Shape 要素の生成に使用されるファクトリー プロシージャの Type。これは、オプション BarLayer.shape-factory の型です。
public constant BarLayer.ShapeFactory:ProcType ={proc-type {layer:BarLayer, rectangle:GRect, record:Record, record-index:int, series-index:int, border-width:any, border-line-style:LineStyle }:Shape }

クラス プロシージャ
default-shape-factory:BarLayer.shape-factory の既定値。
public {BarLayer.default-shape-factory
layer:BarLayer,
rectangle:GRect,
record:Record,
record-index:int,
series-index:int,
border-width:any,
border-line-style:LineStyle
}:Shape

メソッド
get-data-mapping:この ChartLayerChartDataSeries の 1 つに対応する ChartDataMapping オブジェクトを取得します。
public {BarLayer.get-data-mapping}:ChartDataMapping
get-data-series-from-shape:Shape に関連した ChartDataSeries を決定します (ある場合)。
public {BarLayer.get-data-series-from-shape
shape:Shape
}:#ChartDataSeries
maybe-create-x-axis:必要な場合には、この ChartLayer を表すのに適切な X 軸を作成します。
public {BarLayer.maybe-create-x-axis
series-already-used:ChartDataSeriesSet
}:#ChartAxis
set-data-series-visibility:ChartLayer.y-axis-data の個々のメンバの表示を制御します。
public {BarLayer.set-data-series-visibility
data-series-index:int,
visible?:bool
}:void
update-layout:この ChartLayer の内部レイアウトを更新します。
public {BarLayer.update-layout}:void
メソッド 継承 StackableChartLayer: append-data-series, compute-data-min-max, get-inverse-data-mapping
メソッド 継承 ChartLayer: append-color-association, create-legend-entries, detach, draw, get-data-series-visibility, get-fill-pattern-for-data-series, get-nearest-record-in-data, get-own-bounds, get-record-at-point, get-record-count, handle-observer-message, maybe-create-y-axis-for-series, non-keyword-init-arg, note-color-associations-changed, note-y-axis-data-array-changed, remove-color-association, remove-data-series, self-contains-point?, self-intersects-polygon?
メソッド 継承 Shape: apply-rotation, apply-scale, apply-transformation, apply-translation, apply-translation-in-parent, constrain-own-layout-bounds, constrain-shape-layout-bounds, contains-point?, find-graphical-ancestor, fire-crossing-event, fire-in-child, get-display-context, get-down-orientation-in-shape-parent, get-graphical-root, get-gui-path, get-gui-path-to-child, get-local-device-pixel-size, get-origin-in-graphical-ancestor, get-origin-in-root, get-origin-in-shape-parent, get-origin-in-shape-root, get-own-bounds-in-shape-root, get-own-layout-bounds, get-right-orientation-in-shape-parent, get-shape-bounds, get-shape-bounds-in-shape-root, get-shape-layout-bounds, get-top-left-in-ancestor, get-transformation-to-shape-root, keyword-init-arg, option-change-notify, overdraw-for-selection, quantize-line-thickness, request-draw, request-draw-self, reset-transformation, set-rotation, set-scale, set-transformation, set-translation-in-parent, to-Graphic, transform-from-display-coordinates, transform-from-graphical-root-coordinates, transform-point-from-shape-root, transform-point-to-shape-root, transform-to-display-coordinates, transform-to-graphical-root-coordinates, transform-vector-from-shape-root, transform-vector-to-shape-root, transformation-changed, transformation-changing
メソッド 継承 Observer: observe, stop-observing
メソッド 継承 ShapeContainerBase: add, clear, clone-children, draw-shape-child, draw-shape-children, get-all-children-at-point, get-child-at-point, get-leaf-at-point, get-shape-root, note-attached, note-detaching, notify-option-children, on-drag-enter, on-pointer-enter, on-pointer-envelope-event, register-options, remove, set-shape-index, set-shape-index-after, set-shape-index-before, shape-container-fire-inferior-crossing-event, shape-container-handle-crossing, shape-container-pick-child, shape-container-pointer-enter-occurred, shape-container-pointer-leave-occurred
メソッド 継承 Visual: add-from-init-args, animate, change-cursor, clonable-appearance?, clone-appearance, clone-appearance-helper, find-test-children, get-focus-manager, get-layout-context, get-test-parent, get-test-property, get-text, get-view, maybe-fire-attach-event, maybe-fire-detach-event, note-caret-position, on-drag-leave, on-pointer-leave, pop-cursor, prepare-test-object, prepare-test-parent, push-cursor, quantize-width, refresh-style-options, release-key-focus, request-key-focus, scroll-to-include, test-record, test-run, xy-offset-to
メソッド 継承 GraphicOptions: any-to-Distance
メソッド 継承 GuiEventTarget: handle-delegate-event, handle-event, on-action, on-cancel-mode, on-command-changed, on-commit, on-composition-change-event, on-composition-result-event, on-context-menu-event, on-current-record-change-request, on-current-record-changed, on-destroy-notify, on-destroy-requested, on-drag-over, on-drag-pointer, on-drag-started, on-drop, on-end-composition-event, on-focus-event, on-focus-in, on-focus-out, on-gesture, on-gesture-begin, on-gesture-end, on-gesture-magnify, on-gesture-pan, on-gesture-rotate, on-gesture-swipe, on-gesture-tap, on-gesture-touch, on-grab-release, on-gui-event, on-input-method-event, on-inspection, on-key-event, on-key-press, on-pointer-button, on-pointer-crossing, on-pointer-event, on-pointer-motion, on-pointer-press, on-pointer-release, on-pointer-scroll, on-raw-key-event, on-raw-key-press, on-raw-key-release, on-reset, on-selectable-added, on-selectable-removed, on-selection-changed, on-selection-context-activated, on-selection-context-deactivated, on-selection-event, on-start-composition-event, on-start-event, on-stop-event, on-view-activate, on-view-deactivate, on-window-close, remove-event-handlers-for-event-class
メソッド 継承 DataBindingTarget: add-data-binding, get-data-binding, refresh-data-binding, remove-data-binding, unset-property, update-data-binding, validate-data-binding
メソッド 継承 EventTarget: accepts-event-class?, add-event-handler, event-handler-present?, remove-event-handler, verify-event
メソッド 継承 OptionListInterface: add-option, add-style-option, change-option-parent-notify, clone-options, get-option, get-option-by-name, local-add-notify, local-remove-notify, name-to-option-key, new-option-item, option-changed, option-lookup, option-lookup-here, option-propagate-notify, option-set?, propagate-option-change, remove-option, remove-style-option, remove-styles, set-option-by-name, set-style-option-by-name, unset-option-by-name, unset-style-option-by-name
メソッド 継承 BasicEventTarget: enqueue-event
メソッド 継承 InitRestArgParser: process-rest-args
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
default (コンストラクタ)
public {BarLayer.default
x-axis-data:#ChartDataSeries = null,
stacking-mode:ChartStackingMode = ChartStackingMode.none,
shape-factory:BarLayer.ShapeFactory = BarLayer.default-shape-factory,
...
}

新規の BarLayer を作成します。

x-axis-data: ChartLayer.x-axis-data の初期値。この値は、指定されると、LayeredChart での自動 X 軸生成を変更するために使用されます。
stacking-mode: このグラフの初期 ChartStackingModeChartStackingMode.none 以外のスタッキング モードでは許可されるデータの型に制約が生じることに注意してください。詳細については、BarLayer.stacking-mode を参照してください。
shape-factory: BarLayer.shape-factory の初期値。このプロシージャは、プロットする Shape の作成を制御します。BarLayer.ShapeFactory も参照してください。
...: データ系列、オプション、および他の項目の初期化の値。詳細については、ChartLayer.default を参照してください。

例については、BarLayer を参照してください。



プロパティ詳細
bar-border-line-style (非ローカル オプション)
public BarLayer.bar-border-line-style:LineStyle

この BarLayer 内の棒の境界の LineStyle

説明

bar-border-line-style を参照してください。


bar-border-width (非ローカル オプション)
public BarLayer.bar-border-width:any

この BarLayer 内の棒の境界幅。

説明

bar-border-width を参照してください。


bar-spacing (非ローカル オプション)
public BarLayer.bar-spacing:double

棒クラスタの間隔。

説明

bar-spacing を参照してください。


series-shapes (フィールド)
public constant BarLayer.series-shapes:{Array-of Shape} ={new {Array-of Shape}}

この BarLayer のプロットを表す Shape を含む配列。

説明

この配列には、BarLayer.y-axis-data 内のChartDataSeries ごとに 1 つの要素が格納されます。これらの Shapes は、BarLayer.shape-factory によって返されたオブジェクトを子として持ちます。このプロシージャは、Shape が生成される方法を変更するために使用できます。
この配列は、単なるインスペクション用で、変更はできません。要素の順序を変更したり、要素を追加または削除したりしないでください。また、その内容は、グラフのレイアウト処理が行われるたびに変更されます。そのため、レイアウト処理が行われて初めてその内容が有効になります。EventHandlerChartLayoutChanged に対して使用し、これらの値が変更された時点で通知を受け取ることができます。
この配列内の Shape オブジェクトの変更は許可されます。ただし、一般的に BarLayer.shape-factory にファクトリー プロシージャを提供して同じことを行うほうがはるかに容易です。レイアウトが変更された時点や形状の更新が必要となる時点を考慮する必要がないので、この手法をお勧めします。


shape-factory (アクセサ)
アクセサ public BarLayer.shape-factory:BarLayer.ShapeFactory
セッター public BarLayer.shape-factory:BarLayer.ShapeFactory

この BarLayer 内の各プロット Shape を生成するために使用されるファクトリ プロシージャ。

説明

独自のプロシージャを提供して、プロットの実行方法を変更できます。このプロシージャは、データ系列ごとに複数回呼び出され、BarLayer.y-axis-data の各データ系列内のレコードごとに 1 回呼び出されます。プロシージャの引数については、BarLayer.ShapeFactory を参照してください。
形状ファクトリを変更することは、オプション設定が十分でない場合に、プロットの外観を変更するためには、望ましいメソッドです。たとえば、BarLayer.series-shapes の内容を変更することは望ましい方法です。形状が再生成される場合は常にファクトリーが必ず呼び出されることが 1 つの理由です。一方、このようにしないと、独自にそれを追跡する必要があります。
既定の形状ファクトリーは BarLayer.default-shape-factory です。一般的な方法では、ファクトリー プロシージャを定義して、既定のファクトリーを呼び出してから、結果を変更します。たとえば、Visual.tooltip などのオプションを変更できます。ただし、この手法を用いて系列の色を変更することはお勧めできません。グラフの凡例ではこの変更が表示されないためです。代わりに、Chart.color-palette または ChartLayer.color-associations を使用してください。


例: 次の使用: BarLayer.shape-factory
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
    location = "../docstring-support/gui/charts-doc.scurl"
}

{let chart:LayeredChart =
    {LayeredChart
        width = 15cm,
        height = 6cm,
        bar-border-width = 2px,
        {BarLayer
            sample-records,
            "Age",
            "Points",
            shape-factory =
                {proc {layer:BarLayer,
                       rectangle:GRect,
                       record:Record,
                       record-index:int,
                       series-index:int,
                       border-width:any,
                       border-line-style:LineStyle
                      }:Shape
                    {return
                        {EllipseShape
                            rectangle,
                            border-width = border-width,
                            border-line-style = border-line-style,
                            color =
                                {layer.get-fill-pattern-for-data-series
                                    series-index
                                }
                        }
                    }
                }
        }
    }
}

{Canvas
    width = chart.width,
    height = chart.height,
    chart
}

{RadioFrame
    {HBox
        spacing = 4pt,
        {RadioButton radio-value = ChartStackingMode.none, value = true},
        {RadioButton radio-value = ChartStackingMode.stacked},
        {RadioButton radio-value = ChartStackingMode.percent}
    },
    {on ValueFinished at rf:RadioFrame do
        let constant layer:BarLayer = chart.layers[0] asa BarLayer
        set layer.stacking-mode = rf.value asa ChartStackingMode
    }
}


style-element (アクセサ)
アクセサ public BarLayer.style-element:String

スタイリングの目的のための、この Visual の "要素" や "型" です。

説明

この実装によって Visual._style-elementの値が返されますが、通常は定数を返すためにオーバーライドされます。

オーバーライド

Visual のサブクラスのスタイルが他のオブジェクトと異なる場合、このゲッターは適切な文字列を返すようにオーバーライドされる必要があります。 慣例では,この文字列はクラス名または、オブジェクトを生成するマークアップの名前です。
オーバーライドでは、空の文字列でないかぎり、self._style-elementを返さなければなりません。
導入: バージョン 6.0



クラス変数と定数の詳細
ShapeFactory (クラス定数)
public constant BarLayer.ShapeFactory:ProcType ={proc-type {layer:BarLayer, rectangle:GRect, record:Record, record-index:int, series-index:int, border-width:any, border-line-style:LineStyle }:Shape }

BarLayer Shape 要素の生成に使用されるファクトリー プロシージャの Type。これは、オプション BarLayer.shape-factory の型です。

layer: Shape 生成が実行される BarLayer
rectangle: Shape の必要な位置を記述する GRect。このオブジェクトは、この ShapeFactory を呼び出すコードによって再利用されるので、保持しないでください。GRect を使用して、RectangleShape などの Shape を作成できます。その理由は、GRect を直接保存するのではなく、コピーするためです。
record: ShapeFactory のこの特定の呼び出しに対応する Record
record-index: RecordSet の先頭からカウントした record のインデックス。
series-index: layer.y-axis-data へのインデックスによって表わされたプロットされる ChartDataSeries
border-width: Shape の生成で使用される境界幅。この値は、bar-border-width から取得されます。
border-line-style: Shape の生成で使用される境界 LineStyle。この値は、bar-border-width から取得されます。

戻り値

BarLayer に追加される Shape (通常は RectangleShape)。返された値は、BarLayer.series-shapes のメンバの 1 つの子になります。

説明

このタイプの詳細およびその使用例については、BarLayer.shape-factory を参照してください。



クラス プロシージャ詳細
default-shape-factory (クラスプロシージャ)
public {BarLayer.default-shape-factory
layer:BarLayer,
rectangle:GRect,
record:Record,
record-index:int,
series-index:int,
border-width:any,
border-line-style:LineStyle
}:Shape

BarLayer.shape-factory の既定値。

layer: Shape 生成が実行される BarLayer
rectangle: Shape の必要な位置を記述する GRect。このオブジェクトは、この ShapeFactory を呼び出すコードによって再利用されるので、保持しないでください。GRect を使用して、RectangleShape などの Shape を作成できます。その理由は、GRect を直接保存するのではなく、コピーするためです。
record: ShapeFactory のこの特定の呼び出しに対応する Record
record-index: RecordSet の先頭からカウントした record のインデックス。
series-index: layer.y-axis-data へのインデックスによって表わされたプロットされる ChartDataSeries
border-width: Shape の生成で使用される境界幅。この値は、bar-border-width から取得されます。
border-line-style: Shape の生成で使用される境界 LineStyle。この値は、bar-border-width から取得されます。

戻り値

rectangle を表す RectangleShape

説明

このプロシージャは、BarLayer.get-fill-pattern-for-data-series を使用して形状の色を提供し、渡されたパラメータから RectangleShape を作成するだけです。
このプロシージャは、形状を最初から作成するのではなく、既存の形状を変更したい場合に限り、独自の形状ファクトリー プロシージャから呼び出すのが一般的です。この例については、BarLayer を参照してください。



メソッド詳細
get-data-mapping (メソッド)
public {BarLayer.get-data-mapping}:ChartDataMapping

この ChartLayerChartDataSeries の 1 つに対応する ChartDataMapping オブジェクトを取得します。

y-data: マッピングが有効になっている ChartDataSeries。このオブジェクトは ChartLayer.y-axis-data のメンバでなければなりません。

戻り値

このレイヤおよび指定されたデータ系列の ChartDataMapping オブジェクト。

説明

ChartDataMapping により、ChartDataMapping.get-position を使用して指定のレコードの空間位置を簡単に決定できます。これは一般的に、Shape オブジェクトをそのプロットの一部として位置付ける場合に、ChartLayer の実装によって使用されます。
返される位置は、座標内でプロット エリアに対して相対的であることに注意してください。下の例では、座標は ShapeChartLayer 自体に追加するためにそのまま使用されます。すべての ChartLayer がプロット エリアの原点を自身の原点としてもっているので、これは有効です。
座標を Chart に対して相対的としたい場合は、LayeredChart.plot-area.transformation.transform を使用してこれを実現できます。
ChartLayer.get-inverse-data-mapping も参照してください。

注意事項

このメソッドは、レイアウトがペンディングである場合、ある程度のグラフ レイアウト処理が即時に実行されます。データ マッピングは有効な軸がないと決定されないため、LayeredChart.ensure-axes-valid が常に呼び出されます。
グラフの軸またはこのレイヤのデータ系列を変更する後続の操作 (スタッキング モードを変更する操作など) は、ChartDataMapping オブジェクトを無効化することに注意してください。このオブジェクトを使用すると、意味のない結果が作成されます。最善の策は、これらのオブジェクトを保持しないで、必要になった時点でこのメソッドを用いてこれらのオブジェクトを取得することです。


例: ChartDataMapping を使用しての Shape のグラフへの追加
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
    location = "../docstring-support/gui/charts-doc.scurl"
}

{let chart:LayeredChart =
    {LayeredChart
        width = 15cm,
        height = 6cm,
        {BarLayer
            sample-records,
            "Age",
            x-axis-data = {ChartDataSeries sample-records, "Name"}
        },
        {LineLayer
            sample-records,
            "Wins"
        },
        {on ChartLayoutChanged do
            || Give big winners a gold diamond
            let constant layer:ChartLayer = chart.layers[1]
            let constant map:ChartDataMapping =
                {layer.get-data-mapping layer.y-axis-data[0]}


            let index:int = 0
            {for record in sample-records do
                {if record["Wins"] asa int >= 6 then
                    let constant (pos:Distance2d, y-was-null?:bool) =
                        {map.get-position record, index}
                    
                    {if not y-was-null? then
                        || Don't add shapes for records with null values.
                        let constant size:Distance =
                            3 * {sqrt 2} * {layer.get-display-context}.pixel-size
                        {layer.add
                            {RectangleShape
                                {GRect size, size, size, size},
                                translation = pos,
                                rotation = 45deg,
                                color = "gold",
                                tooltip =
                                    {Tooltip
                                        {format
                                            "%s got %d wins!",
                                            record["Name"],
                                            record["Wins"]
                                        }
                                    }
                            }
                        }
                    }
                }
                
                {inc index}
            }
        }
    }
}

{value chart}


get-data-series-from-shape (メソッド)
public {BarLayer.get-data-series-from-shape
shape:Shape
}:#ChartDataSeries

Shape に関連した ChartDataSeries を決定します (ある場合)。

shape: 検索する Shape

説明

ChartLayer.y-axis-data の要素を表すために、Shape がこの ChartLayer によって生成された場合は、このメソッドでその要素が判別され、該当するデータ系列が返されます。その他の場合は、null を返します。
ChartLayer をサブクラス化しようとする場合は、このメソッドを実装する必要があります。これは通常、生成された Shape のセットを追跡し、渡される Shape が既知の Shape のメンバであるかどうかを決定することにより実行されます。


maybe-create-x-axis (メソッド)
public {BarLayer.maybe-create-x-axis
series-already-used:ChartDataSeriesSet
}:#ChartAxis

必要な場合には、この ChartLayer を表すのに適切な X 軸を作成します。

series-already-used: X 軸を作成するために既に使用されたすべての ChartDataSeries を含むセット。このオブジェクトは、複数の ChartLayersChartLayer.x-axis-data として同じ系列が指定された場合に、同一軸を複数作成しないようにするために使用されます。

戻り値

LayeredChart に追加される ChartAxis、あるいはない場合は null

説明

このメソッドは、自動軸生成プロセスによって内部的に呼び出されます。既定では、ChartLayer.x-axis-data が非 null である場合にのみ、軸が作成されます。この場合、series-already-used がチェックされ、ChartLayer.x-axis-data が存在しなければ、このメソッドで新規 ChartAxis が作成されます。

注意事項

このメソッドは、作成される軸の性質を変更するようにオーバーライドできます。たとえば、BarLayer はこのメソッドをオーバーライドして、適切なタイプ (EnumeratedBarChartAxis または DefaultBarChartAxis) の軸が作成されるようにします。
必要であれば、実装で series-already-used を無視することができます。無視しなければ、このメソッドの実装で系列をその使用時にセットに追加する必要があります。
ChartLayer.maybe-create-y-axis-for-series と対照的に、このメソッドの呼び出しで X 軸が作成されない場合、LayeredChart には X 軸を作成するメカニズムはありません。


set-data-series-visibility (メソッド)
public {BarLayer.set-data-series-visibility
data-series-index:int,
visible?:bool
}:void

ChartLayer.y-axis-data の個々のメンバの表示を制御します。

data-series-index: 変更するデータ系列で、ChartLayer.y-axis-data へのインデックスとして表わされます。
visible?: data-series-index によって参照されるデータ系列が表示されない場合は、false です。

説明

これは、凡例メンバや既存の系列の色を変更せずにデータの可視性を制御する場合に役立ちます。この実装は ChartLayer サブクラスによって実行されます。標準グラフ レイヤは Shape.visible? を使用して可視性を制御します。独自のサブクラス内でこのメソッドを実装する場合、必ずスーパークラスの実装を呼び出す必要があります。


例: ChartLayer.set-data-series-visibility の使用
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
    location = "../docstring-support/gui/charts-doc.scurl"
}

{let chart:LayeredChart =
    {LayeredChart
        width = 12cm,
        height = 6cm,
        {LineLayer
            sample-records,
            "Age",
            "Points",
            "Height",
            x-axis-data = {ChartDataSeries sample-records, "Name"},
            symbols-at-data-points? = true
        }
    }
}

{value chart}

{CheckButton
    label = "Show Age?",
    value = true,
    {on ValueFinished at cb:CheckButton do
        let layer:ChartLayer = chart.layers[0]
        {layer.set-data-series-visibility 0, cb.value}
    }
}

{CheckButton
    label = "Show Points?",
    value = true,
    {on ValueFinished at cb:CheckButton do
        let layer:ChartLayer = chart.layers[0]
        {layer.set-data-series-visibility 1, cb.value}
    }
}

{CheckButton
    label = "Show Height?",
    value = true,
    {on ValueFinished at cb:CheckButton do
        let layer:ChartLayer = chart.layers[0]
        {layer.set-data-series-visibility 2, cb.value}
    }
}


update-layout (メソッド)
public {BarLayer.update-layout}:void

この ChartLayer の内部レイアウトを更新します。

説明

これは LayeredChart.update-layout から呼び出されます。ChartLayer の実装では、このメソッドを使用して、プロット形状が再生成され、レイヤに追加されます。ChartLayer をサブクラス化しようとする場合、データを表すためにさまざまな Shape を作成し、ChartLayer.add を使用してレイヤに追加するためには、このメソッドをオーバーライドする必要があります。