(クラス)
LayeredChart 内の 1 つ以上のプロットを表す抽象クラス。
説明
ChartLayer objects are used to define which data should be plotted, and the manner in which they should be plotted. It is designed to be subclassable, so you can create your own chart style. However, it is usually simpler to start by modifying a standard implementation. All implementations contain a
shape-factory option, which you can use to override its method of generating the
Shape objects comprising the plot.
The standard implementations are:
Note that it may also be possible to get the plot you desire by combining multiple
ChartLayers in a
LayeredChart. For example, it is easy to get a line plot with icons at each data point by placing a
ScatterLayer on top of a
LineLayer. See
LayeredChart for an example of this.
注意事項
Shape オブジェクトを
ChartLayer 自体に追加することによって、グラフに注釈を付けることは一般的です。たとえば、
RectangleShape を追加して、グラフ全体に渡る一定の値を表示できます。
ChartLayer は、プロット エリアと同じ原点 (つまり、プロット エリアの左下) を共有します。標準レイヤ実装のすべては、
ChartLayer.update-layout 時に形状の子をクリアします。これは、この実装に追加されたオブジェクトがすべてレイアウト処理中に削除されることを意味します。
このオブジェクトは、"ChartLayer"のスタイル ルールを記述することによってスタイル化することが出来ます。
例
例:
レベル線による ChartLayer の注釈付け |
|
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
location = "../docstring-support/gui/charts-doc.scurl"
}
{let level-value:double = 3}
{let chart:LayeredChart =
{LayeredChart
width = 15cm,
height = 7cm,
{LineLayer
sample-records,
"Points",
{on ChartLayoutChanged at ll:LineLayer do
let constant y:Distance =
{ll.chart.left-axis.get-position level-value}
{ll.add
{RectangleShape
{GRect 0m, {ll.chart.get-x-axis-length}, .5pt - y, .5pt + y},
color = "red",
{TextShape
"" & level-value,
valign = "bottom",
translation =
{Distance2d
0.8 * {ll.chart.get-x-axis-length},
y
}
}
}
}
}
}
}
}
{value chart}
Level value:
{TextField
value = "" & level-value,
{on ValueFinished at tf:TextField do
set level-value = {tf.value.to-double}
{chart.invalidate-layout}
}
}
| |
コンストラクタ protected | {ChartLayer.default} |
フィールド public constant ChartLayer.color-associations:{
Array-of DataSeriesColorPair} ={new {Array-of DataSeriesColorPair}}
アクセサ public ChartLayer.generate-y-axes?:
bool
非ローカル オプション public ChartLayer.legend-enabled?:
bool
アクセサ public ChartLayer.style-element:
String
フィールド public constant ChartLayer.y-axis-data:{
Array-of ChartDataSeries} ={new {Array-of ChartDataSeries}}
プロパティ 継承 Shape:
as-Shape, border-color, color, draw-operation, graphical-parent, option-parent, possibly-displayed?, selection-context, shape-parent, shape-selectable, stroke-thickness, transformation, visible? プロパティ 継承 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
public | {ChartLayer.append-color-association}:void |
public | {ChartLayer.compute-data-min-max}:(min:any, max:any) |
public | {ChartLayer.create-legend-entries}:void |
public | {ChartLayer.detach}:void |
draw: | このオブジェクトの可視表現を描画します。 |
public final | {ChartLayer.get-data-series-visibility}:bool |
public | {ChartLayer.get-fill-pattern-for-data-series}:FillPattern |
public | {ChartLayer.get-nearest-record-in-data}:#Record |
public | {ChartLayer.get-own-bounds dest:GRect = {GRect.empty}}:GRect |
public | {ChartLayer.get-record-count}:int |
protected | {ChartLayer.handle-observer-message}:void |
public | {ChartLayer.maybe-create-x-axis}:#ChartAxis |
public | {ChartLayer.maybe-create-y-axis-for-series}:#ChartAxis |
public | {ChartLayer.non-keyword-init-arg a:any}:void |
public | {ChartLayer.note-color-associations-changed}:void |
public | {ChartLayer.note-y-axis-data-array-changed}:void |
public | {ChartLayer.remove-color-association}:void |
public | {ChartLayer.self-intersects-polygon?}:bool |
public | {ChartLayer.set-data-series-visibility data-series-index:int,visible?:bool }:void |
public abstract | {ChartLayer.update-layout}:void |
メソッド 継承 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 メソッド 継承 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 メソッド 継承 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 メソッド 継承 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
(コンストラクタ)
protected | {ChartLayer.default} |
新しい ChartLayer を作成します。
...:
... を使用して、次の 2 つのいずれかの方法でプロットされるデータ系列を初期化することもできます。
説明
ChartLayer は抽象クラスなので、このコンストラクタはサブクラスによってのみ使用されます。
(フィールド)
この ChartLayer を含む LayeredChart (ある場合)。
説明
このプロパティは、ChartLayer が LayeredChart に追加されるとすぐに設定されます。
(フィールド)
public constant ChartLayer.color-associations:{
Array-of DataSeriesColorPair} ={new {Array-of DataSeriesColorPair}}
特定の色を特定の ChartDataSeries に関連付けるマッピングを提供します。
説明
DataSeriesColorPair を使用して、自動カラー選択プロセスをオーバーライドできます。ほとんどのアプリケーションは、すべての系列に使用されるカラー パレットをオーバーライドするために、
Chart.color-palette を使用します。ただし、何かの理由で、個別のデータ系列でこれを制御したい場合、あるいは
ChartLayer 間で異なる方法でこれを制御したい場合は、使用するメカニズムは
ChartLayer.color-associations です。
例
例 |
|
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
location = "../docstring-support/gui/charts-doc.scurl"
}
{LayeredChart
width = 15cm,
height = 6cm,
{LineLayer
sample-records,
"Wins",
"Points",
"Age",
{DataSeriesColorPair
{ChartDataSeries sample-records, "Wins"},
"steelblue"
}
}
}
| |
(アクセサ)
アクセサ public ChartLayer.generate-y-axes?:
bool この ChartLayer の Y 軸生成を考慮するかどうかを決定します。
説明
このメソッドは、自動軸生成プロセスによって内部的に呼び出されます。既定では、true が返されますが、一部のレイヤではこれがオーバーライドされます。たとえば、スタッキングをサポートするレイヤ (例については、
LineLayer.stacking-mode を参照) では、スタッキング モードが
ChartStackingMode.percent の場合、プロットは Y 位置について軸にまったく依存しないので、そのレイヤに対しては Y 軸の要求はありません。
(非ローカル オプション)
public ChartLayer.legend-enabled?:
bool Chart の凡例作成を有効または無効にするために使用できる bool。
説明
このオプションは通常、グラフ自体に設定されます。ただし、その意味は、個別の
ChartLayer または
PieSet によって解釈されます。つまり、個別のレイヤまたはセットのそれぞれに凡例項目の生成を有効または無効にできます。
Chart において
false に設定されている場合、レイヤでの値であるか、セットでの値であるかに関係なく、凡例はグラフに含められないことに注意してください。
例
legend-enabled? 定義を代わりに LineLayer 定義の 1 つに移動して、どのように凡例のみに影響するかを確認してください。
例:
次の使用: legend-enabled? |
|
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
location = "../docstring-support/gui/charts-doc.scurl"
}
{RecordGrid height = 6cm, record-source = sample-records}
{LayeredChart
width = 15cm,
height = 6cm,
|| Try moving this into one of the LineLayer definitions:
legend-enabled? = false,
group-y-axis-data-across-layers? = true,
{LineLayer
{ChartDataSeries sample-records, "Age"},
x-axis-data = {ChartDataSeries sample-records, "Name"}
},
{LineLayer
{ChartDataSeries sample-records, "Wins"}
}
}
| |
(非ローカル オプション)
Chart の凡例の個別の凡例項目を生成するために使用されるファクトリ プロシージャ。
説明
(アクセサ)
アクセサ public ChartLayer.style-element:
String スタイリングの目的のための、この Visual の "要素" や "型" です。
説明
オーバーライド
Visual のサブクラスのスタイルが他のオブジェクトと異なる場合、このゲッターは適切な文字列を返すようにオーバーライドされる必要があります。 慣例では,この文字列はクラス名または、オブジェクトを生成するマークアップの名前です。
オーバーライドでは、空の文字列でないかぎり、self._style-elementを返さなければなりません。
導入:
バージョン 6.0
(アクセサ)
X 軸の自動生成に使用される ChartDataSeries。
説明
このプロパティは、特定のデータ系列をその X 軸に使用するように、
LayeredChart に指示するものです。既定では、データ値ではなく、レコード インデックスのみに基づいた X 軸が作成されます。
(フィールド)
public constant ChartLayer.y-axis-data:{
Array-of ChartDataSeries} ={new {Array-of ChartDataSeries}}
この ChartLayer でプロットされる ChartDataSeries。
説明
注意事項
標準実装はすべて、複数のデータ系列のプロットを可能にしています。複数のデータ系列の解釈はレイヤによって異なりますが、通常それらのデータ系列は重なっています。たとえば、
BarLayer.stacking-mode (他のレイヤとも共有されるプロパティ) を使用すれば、連続した各データ系列をそれぞれ前のデータ系列にスタックすることができます。
1 つの
ChartLayer 内でプロットされるすべてのデータ系列は、同一の
RecordSet で発生したものでなければならないことに注意してください。つまり、
ChartDataSeries.source は
ChartLayer.y-axis-data のすべてのメンバについて同一でなければなりません。この制約を避けるには、複数の
ChartLayer を使用します。
(メソッド)
public | {ChartLayer.append-color-association}:void |
(メソッド)
プロットされる ChartLayer.y-axis-data に ChartDataSeries を追加します。
data: 追加される ChartDataSeries。
説明
(メソッド)
public | {ChartLayer.compute-data-min-max}:(min:any, max:any) |
data に関連した最小値と最大値を決定します。
戻り値
最小値と最大値。非 null の値がデータに存在しない場合は、これらの値の両方が null であることに注意してください。それ以外の場合は、どちらも null ではありません。
説明
このメソッドは通常、
ChartDataSeries.compute-min-max を呼び出すためにだけ実装されます。ただし、プロットが考慮されるように、計算を拡張できます。たとえば、スタッキング棒グラフを扱う場合、実際のスタック データの値が考慮されます。これが
ChartDataSeries.compute-min-max ではなく、このメソッドを呼び出す理由です。
(メソッド)
public | {ChartLayer.create-legend-entries}:void |
この ChartLayer に必要な凡例項目を作成します。
container: 作成された項目の追加先の配列。
entries-already-created: 既に作成されている凡例項目を追跡するために使用される
DataSeriesColorPairSet。データ系列と
FillPattern の組み合わせが既にこのセットに存在する場合、このメソッドはそれらを再作成しません。このメソッドがそれらを作成する場合は、それらをセットに追加します。
説明
このメソッドをオーバーライドすると、凡例生成を変更するのに役立ちます。ただし、
legend-entry-factory を使用して、ファクトリ プロシージャを提供するのがより簡単で一般的です。このファクトリ プロシージャは、まだ存在しないそれぞれの凡例項目に対して
ChartLayer.create-legend-entries によって呼び出されます。
(メソッド)
public | {ChartLayer.detach}:void |
この形状を親から切り離します。
説明
親を持たない形状に対して detach を呼び出しても効果はありません。
(メソッド)
このオブジェクトの可視表現を描画します。
オーバーライド
Shape をサブクラス化する場合は、このメソッドをオーバーライドする必要があります。
(メソッド)
この ChartLayer の ChartDataSeries の 1 つに対応する ChartDataMapping オブジェクトを取得します。
戻り値
このレイヤおよび指定されたデータ系列の ChartDataMapping オブジェクト。
説明
返される位置は、座標内でプロット エリアに対して相対的であることに注意してください。下の例では、座標は
Shape を
ChartLayer 自体に追加するためにそのまま使用されます。すべての
ChartLayer がプロット エリアの原点を自身の原点としてもっているので、これは有効です。
注意事項
グラフの軸またはこのレイヤのデータ系列を変更する後続の操作 (スタッキング モードを変更する操作など) は、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}
| |
(メソッド)
Shape に関連した ChartDataSeries を決定します (ある場合)。
shape: 検索する Shape。
説明
ChartLayer.y-axis-data の要素を表すために、
Shape がこの
ChartLayer によって生成された場合は、このメソッドでその要素が判別され、該当するデータ系列が返されます。その他の場合は、null を返します。
ChartLayer をサブクラス化しようとする場合は、このメソッドを実装する必要があります。これは通常、生成された Shape のセットを追跡し、渡される Shape が既知の Shape のメンバであるかどうかを決定することにより実行されます。
(メソッド)
public final | {ChartLayer.get-data-series-visibility}:bool |
(メソッド)
public | {ChartLayer.get-fill-pattern-for-data-series}:FillPattern |
この ChartLayer のデータ系列の 1 つのプロットで使用する FillPattern を取得します。
戻り値
使用される FillPattern。
説明
(メソッド)
この ChartLayer の ChartDataSeries の 1 つに対応する ChartInverseDataMapping オブジェクトを取得します。
error-if-no-axes?:
これが起こり、error-if-no-axes? が true であると、エラーがスローされます。error-if-no-axes? が false の場合は、代わりに null が返されます。
戻り値
このレイヤおよび指定されたデータ系列の ChartInverseDataMapping オブジェクト (作成可能な場合)。null が返されるのは、y-data と一致する軸がない場合、および error-if-no-axes? が false の場合に限られます。
説明
ChartInverseDataMapping により、指定した空間位置に対応する X 値と Y 値を簡単に判断できます。たとえば、これを使用して、ユーザーの入力に応じて
RecordSet 内でデータを追加したり、データを変更したりできます。
注意事項
グラフの軸またはこのレイヤのデータ系列を変更する後続の操作 (スタッキング モードを変更する操作など) は、ChartInverseDataMapping オブジェクトを無効化することに注意してください。このオブジェクトを使用すると、意味のない結果が作成されます。最善の策は、これらのオブジェクトを保持しないで、必要になった時点でこのメソッドを用いてこれらのオブジェクトを取得することです。
必ずしもグラフのすべての構成で完全な逆マッピングを作成できるわけではないことにも注意してください。スタッキングを使用するどのグラフでも (
ChartStackingMode.stacked か
ChartStackingMode.percent のいずれか)、X 軸専用
ChartInverseDataMapping が返されます。この場合、Y 値は
null となります。
例
例:
次の使用: ChartInverseDataMapping |
|
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
location = "../docstring-support/gui/charts-doc.scurl"
}
{let bar-display:TextDisplay = {TextDisplay width = 4cm}}
{let line-display:TextDisplay = {TextDisplay width = 4cm}}
{let chart:LayeredChart =
{LayeredChart
width = 15cm,
height = 6cm,
{BarLayer
sample-records,
"Age",
x-axis-data = {ChartDataSeries sample-records, "Name"}
},
{LineLayer
sample-records,
"Wins"
},
{on e:PointerMotion do
let layer:ChartLayer = chart.layers[0]
let inverse-mapping:ChartInverseDataMapping =
{non-null {layer.get-inverse-data-mapping layer.y-axis-data[0]}}
let (x:any, y:any) = {inverse-mapping.get-values e.x, e.y}
set bar-display.value = x & ", " & y
set layer = chart.layers[1]
set inverse-mapping =
{non-null {layer.get-inverse-data-mapping layer.y-axis-data[0]}}
set (x, y) = {inverse-mapping.get-values e.x, e.y}
set line-display.value = x & ", " & y
}
}
}
{Table
cell-border-width = 1pt,
cell-border-color = FillPattern.silver,
{row-prototype
font-weight = FontWeight.bold,
{text BarLayer (Age)},
{text LineLayer (Wins)}
},
{row-prototype bar-display, line-display},
{row-prototype
{cell-prototype
colspan = 2,
chart
}
}
}
| |
(メソッド)
public | {ChartLayer.get-nearest-record-in-data}:#Record |
ChartDataSeries 内で指定の空間位置に最も近い Record を確認してください。
x: プロット エリア座標内での X 座標。
y: プロット エリア座標内での Y 座標。
x-axis-only?:
true (既定値) の場合、レコードの Y 軸位置は考慮されません。そうでない場合は、総合位置が考慮されます。(グラフは反転できます。つまり、垂直軸が X 軸と見なされることを意味します。
LayeredChart.flipped? を参照してください。)
戻り値
説明
「最も近い」の定義は、
x-axis-only? に基づきます。既定では、X 軸の値のみに基づきます。
x-axis-only? を使用して、両方の座標が考慮されるように、この動作を変更できます。
LayeredChart.flipped? の値によっては、これは X 座標または Y 座標を意味する場合があることに注意してください。
x および y として渡されるポイントは、プロット エリアに関連して座標内に配置される必要があります。Chart に関連した座標がある場合、イベント ハンドラをグラフ自体に使用する場合のように、これらの座標をプロット エリアの座標系に変換する必要があります。これを行う方法の例については、以下を参照してください。
注意事項
これに関するその他の手法については、以下を参照してください。
例
例 |
|
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
location = "../docstring-support/gui/charts-doc.scurl"
}
{let x-axis-only?:bool = true}
{let record-display:TextDisplay = {TextDisplay}}
{let value-display:TextDisplay = {TextDisplay}}
{let chart:LayeredChart =
{LayeredChart
width = 15cm,
height = 6cm,
{ScatterLayer
sample-records,
"Wins",
x-axis-data = {ChartDataSeries sample-records, "Age"}
},
{on e:PointerMotion do
|| Transform coordinates from chart into one of its
|| children -- the plot area:
let constant point-in-plot-area:Distance2d =
{chart.plot-area.transformation.inverse-transform-point
{Distance2d e.x, e.y}
}
let layer:ChartLayer = chart.layers[0]
let mapping:ChartDataMapping =
{layer.get-data-mapping layer.y-axis-data[0]}
let inverse-mapping:ChartInverseDataMapping =
{non-null {layer.get-inverse-data-mapping layer.y-axis-data[0]}}
let record:Record =
{non-null
{layer.get-nearest-record-in-data
point-in-plot-area.x,
point-in-plot-area.y,
layer.y-axis-data[0],
mapping,
x-axis-only? = x-axis-only?
}
}
set record-display.value =
{format
"Name: %s, points: %s, wins: %s, age: %s",
record["Name"],
record["Points"],
record["Wins"],
record["Age"]
}
let (x:any, y:any) = {inverse-mapping.get-values e.x, e.y}
set value-display.value = x & ", " & y
}
}
}
{Table
cell-border-width = 1pt,
cell-border-color = FillPattern.silver,
{row-prototype
font-weight = FontWeight.bold,
{text get-nearest-record-in-data results},
{text ChartInverseDataMapping results}
},
{row-prototype record-display, value-display},
{row-prototype
{CheckButton
label = "find nearest using x axis only?",
value = x-axis-only?,
{on ValueFinished at cb:CheckButton do
set x-axis-only? = cb.value
}
},
{CheckButton
label = "chart is flipped?",
value = chart.flipped?,
{on ValueFinished at cb:CheckButton do
set chart.flipped? = cb.value
}
}
},
{row-prototype
{cell-prototype
colspan = 2,
chart
}
}
}
| |
(メソッド)
public | {ChartLayer.get-own-bounds dest:GRect = {GRect.empty}}:GRect |
ローカル座標系におけるこの Shape の四角形のレンダリング境界を計算します。
dest: データを返すために使用されるオプションの GRect オブジェクト。
戻り値
境界を含む
GRect オブジェクト。これは、常に
dest と同じオブジェクトになります。この
GRect は正しい形式である必要があります。つまり、次の条件が true でなければなりません。
-dest.lextent <= dest.rextent and -dest.ascent <= dest.descent
説明
返された境界は、このオブジェクトによって描画されるすべてのピクセルをカバーしている必要があります。ただし、このオブジェクトのすべての子を含んでいません。
注意事項
オーバーライド
Shape をサブクラス化する場合は、このメソッドをオーバーライドする必要があります。データを返すには、dest パラメータを使用する必要があります。
(メソッド)
指定の位置に Record、ChartDataSeries、および Shape があれば、それらを確認してください。
x: この ChartLayer の相対 X 座標。
y: この ChartLayer の相対 Y 座標。
戻り値
ポイントでの Record、ChartDataSeries、および Shape。この位置に Shape が配置されたデータ系列がない場合、すべての値は null になります。そうでない場合は、すべて非 null になります。
説明
渡されるポイントは、この
ChartLayer の座標系に対して相対的である必要があります。この
ChartLayer の
transformation を変更しない限り、これは、プロット エリアの座標系と同じになります。
Chart 相対座標のプロット エリア相対座標への変換を含む例については、次を参照してください。
ある意味では、これは単に便利なメソッドです。次のアルゴリズムが使用されています。
注意事項
これに関するその他の手法については、以下を参照してください。
例
このグラフ内の線上でマウス ポインタを移動し、データに関する情報を表示します。この情報は、ChartLayer.get-record-at-point を使用して実行時に検出されます。
例:
次の使用: ChartLayer.get-record-at-point |
|
{import * from CURL.GUI.CHARTS}
{import * from CHARTS-DOC,
location = "../docstring-support/gui/charts-doc.scurl"
}
{let display:TextDisplay = {TextDisplay}}
{let chart:LayeredChart =
{LayeredChart
width = 15cm,
height = 6cm,
{LineLayer
stroke-thickness = 2pt,
sample-records,
"Age",
"Points",
x-axis-data = {ChartDataSeries sample-records, "Name"}
},
{on e:PointerMotion do
|| Transform coordinates from chart into one of its
|| children -- the plot area:
let constant point-in-plot-area:Distance2d =
{chart.plot-area.transformation.inverse-transform-point
{Distance2d e.x, e.y}
}
let constant layer:ChartLayer = chart.layers[0]
let (record:#Record, data:#ChartDataSeries, shape:#Shape) =
{layer.get-record-at-point
point-in-plot-area.x,
point-in-plot-area.y
}
set display.value =
{if-non-null record then
{format
"Name: %s, points: %s, wins: %s, age: %s " &
"(from series %s)",
record["Name"],
record["Points"],
record["Wins"],
record["Age"],
data.field.caption
}
else
""
}
}
}
}
{VBox
hstretch? = true,
display,
chart
}
| |
(メソッド)
public | {ChartLayer.get-record-count}:int |
この ChartLayer に関連した Record の数を決定します。
戻り値
Record 数。
説明
(メソッド)
protected | {ChartLayer.handle-observer-message}:void |
監視対象のオブジェクトがメッセージを送信するときにこのメソッドを呼び出します。Observer はこのメソッドを実装して、変更が発生したときに処理を実行する必要があります。
sender: 変更があった Observable オブジェクトです。
message: これは、Observer からの変更に関する詳細情報が含まれています。詳細情報がない場合は NULL になります。
(メソッド)
public | {ChartLayer.maybe-create-x-axis}:#ChartAxis |
必要な場合には、この ChartLayer を表すのに適切な X 軸を作成します。
series-already-used: X 軸を作成するために既に使用されたすべての
ChartDataSeries を含むセット。このオブジェクトは、複数の
ChartLayers の
ChartLayer.x-axis-data として同じ系列が指定された場合に、同一軸を複数作成しないようにするために使用されます。
戻り値
説明
このメソッドは、自動軸生成プロセスによって内部的に呼び出されます。既定では、
ChartLayer.x-axis-data が非 null である場合にのみ、軸が作成されます。この場合、
series-already-used がチェックされ、
ChartLayer.x-axis-data が存在しなければ、このメソッドで新規
ChartAxis が作成されます。
注意事項
必要であれば、実装で series-already-used を無視することができます。無視しなければ、このメソッドの実装で系列をその使用時にセットに追加する必要があります。
(メソッド)
public | {ChartLayer.maybe-create-y-axis-for-series}:#ChartAxis |
必要な場合には、この ChartLayer の特定の ChartDataSeries を表すのに適切な Y 軸を作成します。
series-already-used: Y 軸を作成するために既に使用されたすべての
ChartDataSeries を含むセット。このオブジェクトは、複数の
ChartLayers の
ChartLayer.y-axis-data に同じ系列が存在する場合に、同一軸を複数作成しないようにするために使用されます。
戻り値
説明
このメソッドは、自動軸生成プロセスによって内部的に呼び出されます。既定では、常に
null が返され、
LayeredChart に対する作成ロジックが延期されます。
注意事項
このメソッドは、作成される軸の性質を変更するようにオーバーライドできます。
必要であれば、実装で series-already-used を無視することができます。無視しなければ、このメソッドの実装で系列をその使用時にセットに追加する必要があります。
(メソッド)
public | {ChartLayer.non-keyword-init-arg a:any}:void |
InitRestArgParser.process-rest-args で非キーワード引数が検出されると、呼び出されます。
説明
Visual によるこのメソッドの実装では、最初にこのメソッドへの入力値をオブジェクトに関連するメタデータとして解釈を試みます。たとえば、オブジェクトに関連する
EventHandler と
DataBinding を認識してから、これらをアタッチするための適切な手順を実行することになります。
オーバーライド
オブジェクトに関連付けられた追加のメタデータも受け入れるようにするには、このメソッドをオーバーライドします。実装では通常、解釈に失敗した入力値でスーパー実装が呼び出されるようにします。
(メソッド)
public | {ChartLayer.note-color-associations-changed}:void |
この ChartLayer に ChartLayer.color-associations の内容が変更されたことを通知します。
説明
任意の方法による ChartLayer.color-associations の直接操作が許可されます。その内容が変更された時に、このメソッドを呼び出すだけです。
例
この例は、プロットのための色としての
Pixmap の使用法を示すとともに、
ChartLayer.note-color-associations-changed の使用法を示しています。
例 |
|
{import * from CURL.GUI.CHARTS}
{import * from CURL.GRAPHICS.IMAGEFILTER}
{import * from CHARTS-DOC,
location = "../docstring-support/gui/charts-doc.scurl"
}
{let chart:LayeredChart =
{LayeredChart
width = 15cm,
height = 6cm,
{BarLayer
sample-records,
"Age",
"Points",
{DataSeriesColorPair
{ChartDataSeries sample-records, "Age"},
FillPattern.black
},
x-axis-data = {ChartDataSeries sample-records, "Name"}
}
}
}
{value chart}
|| Scale the pixmap to a reasonable size:
{let constant pixmap:Pixmap =
{filter-pixmap
scale,
{Pixmap.from-url
{url "curl://install/docs/default/images/curtain.jpg"}
},
scale = 25%,
filter-mode = "linear"
}
}
Color association:
{DropdownList
"black",
"steelblue",
"purple",
"orange",
pixmap,
list-item-creation-proc =
{proc {val:any}:ListItem
{return
{ListValueItem
value = val,
{type-switch val
case p:Pixmap do
{RectangleGraphic
fill-color = val,
width = p.width * 1px,
height = p.height * 1px
}
else
{RectangleGraphic
fill-color = val,
width = 50pt,
height = 10pt
}
}
}
}
},
{on ValueChanged at ddl:DropdownList do
let constant layer:ChartLayer = chart.layers[0]
set layer.color-associations[0] =
{DataSeriesColorPair
layer.color-associations[0].data-series,
ddl.value asa FillPattern
}
{layer.note-color-associations-changed}
},
value="black"
}
| |
(メソッド)
public | {ChartLayer.note-y-axis-data-array-changed}:void |
この ChartLayer に ChartLayer.y-axis-data の順序が変更されたことを通知します。
説明
ChartLayer.y-axis-data は、既存の要素の順序を変更する場合にのみ直接操作できます。これを行う場合、このメソッドを呼び出して、ChartLayer がその要素を再生成できるようにする必要があります。
例
例 |
|
{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",
"Points",
x-axis-data = {ChartDataSeries sample-records, "Name"}
}
}
}
{value chart}
{CommandButton
label = "Switch order",
{on Action do
let constant layer:ChartLayer = chart.layers[0]
let constant temp:ChartDataSeries = layer.y-axis-data[0]
set layer.y-axis-data[0] = layer.y-axis-data[1]
set layer.y-axis-data[1] = temp
|| Here is the important method call:
{layer.note-y-axis-data-array-changed}
}
}
| |
(メソッド)
public | {ChartLayer.remove-color-association}:void |
(メソッド)
ChartDataSeries を ChartLayer.y-axis-data から削除します。
data: 削除される ChartDataSeries。このオブジェクトは、ChartLayer.y-axis-data のメンバである必要があります。そうでない場合、エラーが発生します。
説明
(メソッド)
ポイントがこの Shape 内にあるかどうかを判定します。
x: 点の X 座標。
y: 点の Y 座標。
戻り値
この Shape が (x、y) を含む場合は、true。
説明
ポイントは、このオブジェクトのローカル座標系にあります。このメソッドは、その子を考慮しません。
オーバーライド
Shape をサブクラス化する場合は、このメソッドをオーバーライドする必要があります。このメソッドは、
PointerMotion などのマウス イベントをこのオブジェクトにいつ送信するかなどを決定します。
通常は、このメソッドを実装して、ポイントが形状の境界内にあるかどうかだけでなく、ポイントが形状のレンダリングされたプリミティブ内にあるどうかを確認する必要があります。このメソッドは必要なメトリックを使用して自在に実装できます。
(メソッド)
public | {ChartLayer.self-intersects-polygon?}:bool |
ポリゴンがこの Shape と交差するかどうかを判定します。
polygon: この形状のローカル座標空間にポリゴンを記述するポイント セットを含むオブジェクト。このポリゴンは必ず凸型であり、反時計回りのワインディング順に従います。
説明
オーバーライド
Shape をサブクラス化する場合は、このメソッドをオーバーライドする必要があります。子を考慮する必要はありません。
通常は、このメソッドを実装して、領域が形状の境界内にあるかどうかだけでなく、領域が形状のレンダリングされたプリミティブと交差するかどうかを確認する必要があります。このメソッドは、必要なメトリックを使用して自在に実装できます。このメソッドの実装が
Shape.self-contains-point? と調和しない場合は、このオブジェクトを選択すると予期しない結果になります。
選択機能を使用しない場合は、このメソッドを単純に false を返すように実装できます。
(メソッド)
public | {ChartLayer.set-data-series-visibility data-series-index:int,visible?:bool }:void |
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}
}
}
| |
(メソッド)
public abstract | {ChartLayer.update-layout}:void |
この ChartLayer の内部レイアウトを更新します。
説明