.. sectionauthor:: jo .. _ref-barchart: ############################################################################### BarChartWidget ############################################################################### Das BarChart-Widget dient dazu, horizontale und waagrechte Balken-/Säulencharts inklusive ihrer Labels zu zeichnen, zu animieren und interaktiv zu gestalten. Es bietet eine Vielzahl von Einstellmöglichkeiten, mit denen es an den jeweiligen Anwendungszweck angepasst werden kann. .. note:: Als einfachsten Fall hätte ich eigentlich lieber so etwas (ohne Data), ohne Raster, mit einem Default-Element-Spacing: (jo) :: Beispiel 1: var temp = new Object(); temp.companyName = ['Hans', 'Dieter', 'Peter', 'Willi']; temp.companyColor = ['red', 'green', 'blue', 'yellow']; temp.percent = [1 , 2, 3, 4]; this.controller.setContent (temp); this.Values = temp.percent; .. note:: Stand heute ist: Dasselbe einfache Säulenchart, das ein Data nutzt, das auf das Chart geroutet wurde:: Beispiel 2: this.Controller.setTableContent(data.get("Table")); Die Property ``Orientation`` beschreibt die Richtung, in die der Balken wachsen soll. ``Orientation=up`` ist demnach ein Säulenchart. In ``VerticalRaster`` ist nur ein einziger Layoutbereich mit dem Namen ``chart`` definiert, der den zur Verfügung stehenden Platz ausfüllen soll (``max``). *Diese beiden Angaben entsprechen den Defaults.* Die einzelnen Elemente (=Balken) sollen mit einem Abstand von 10% (des theoretisch für ein Element zur Verfügung stehenden Platzes) gezeichnet werden. Das Chart nutzt ein Template für den Balken; die Farbe des Balkens ist (im Template ``BarTemplate``) an ein Datenfeld im ``Controller`` gebunden. In der Property ``LayoutConstraints`` können für das BalkenTemplate weitere Vorgaben gemacht werden: Hier wird die ``VerticalRasterPosition`` festgelegt. Properties --------------------------------------- Neben den Properties, die für alle Charts gelten (siehe Abschnitt :ref:`ref-charts-common`), hat das Barchart folgende: **Orientation** (Symbol) Die Richtung, in die die Balken gezeichnet werden. Werte: ``up, down, left, right`` Default: ``up`` **ChartAlign** (Symbol) Die Position, an der die Balken oder Säulen innerhalb des Charts gezeichnet werden. Werte: ``top, bottom, left, right, center`` Default: ``center`` **ElementMetrics** (*List(KeyValue)*: Liste aus Key-/Value-Paaren) Erweiterbares Objekt zur Beschreibung von Maßangaben für Chartelemente. Als ein Chartelement wird hier die zu einem Wert gehörige Kombination aus Balken und Labels aufgefasst. Möglich sind die Angaben ``before``, ``after`` und ``spacing``, die einen Bereich vor bzw. nach dem Element oder den Zwischenraum zwischen zwei Elementen beschreiben (als Pixel oder Prozentangabe). Innerhalb der Elemente können die Ein Chart mit einer ersten Gruppe G1 mit zwei Elementen E1 und E2 und einer zweiten Gruppe G2 mit drei Elementen E3, E4 und E5 hat demnach folgende Struktur (b: before, a: after, s: spacing):: bbb__________________________Chart______________________aaa bb________G1_______aassbb_____________G2___________aa b__E1__asb__E2__a b__E3__asb__E4__asb__E5__a Spacing kann nur zwischen Elementen in derselben Gruppe stattfinden: zwischen E2 und E3 gibt es kein Element-Spacing. Default: ``spacing: 10%;before: 0; after: 0`` **GroupMetrics** (*List(KeyValue)*: Liste aus Key-/Value-Paaren) Erweiterbares Objekt zur Beschreibung von Maßangaben für (Werte-)Gruppen. GroupMetrics funktionieren wie ElementMetrics. Default: ``spacing:10%;before: 0; after: 0`` **ChartMetrics** (*List(KeyValue)*: Liste aus Key-/Value-Paaren) Erweiterbares Objekt zur Beschreibung von Maßangaben für das gesamte Chart. Implementiert sind ``before`` und ``after``, die die äußeren Abstände vor- und nach dem Chart, jeweils von links (beim Säulenchart) bzw. oben (beim Balkenchart) gesehen, als Pixel- oder Prozentangabe beschreiben. Default: ``before: 0; after: 0`` **BarMetrics** **ColumnNames** (List) Dient dazu, die Spalten einer Data-Tabelle im ``Controller`` zu benennen, was die Zuweisung von Binding-Keys erleichtert. Vgl. "Controller und Binding im Chart". Beispiel:: **Controller** (ChartController) Objekt des Charts, das Daten verwaltet und als Binding-Target dienen kann. Vgl. "Controller und Binding im Chart". Default: ein leeres ``ChartController``-Objekt. Nutzen Sie eine JavaScript-Aktion, um Daten zuzuweisen (z.B. mit Controller.setTableContent()), oder weisen Sie der Property Controller den Controller eines andeen Widgets zu, um Daten gemeinsam zu nutzen. .. note:: ChartElements fallen weg. Ersatz: ElementLabels (, SubElementLabels, GroupLabels), BarTemplates **ElementLabels (List(Strings))** Liste von Templatenamen, die als Labels für Elemente verwendet werden sollen. Default: leere Liste **BarLabels (List(Strings))** Liste von Templatenamen, die als Labels für SubElemente verwendet werden sollen. Default: leere Liste **GroupLabels (List(Strings))** Liste von Templatenamen, die als Labels für Gruppen verwendet werden sollen. Default: leere Liste **BarTemplates (List(Strings))** Liste von Templatenamen, die für die Balken verwendet werden sollen. **MinNumberOfBars** (Integer) Mit der Angabe von ``MinNumberOfBars`` kann das Chartlayout modifiziert werden: Die vorhandenen Elemente werden so layoutet, *als ob* es die angegebene Zahl von Elementen gäbe. Default: 0 **MaxNumberOfBars** (Integer) Mit der Angabe von ``MaxNumberOfBars`` werden maximal die angegebene Zahl Balken gezeichnet, d.h. die Werteliste wird für die Darstellung abgeschnitten. Default: 12 **ZeroLineWidth** (Number) Beschreibt die Liniendicke der Nullinie. Default: 0 **ZeroLineMode** (Symbol) *NYI (war auch in Core nicht implementiert?)* **ZeroLineOffset** (Number) Abstand der Nulllinie vom Balken (in pos. und neg. Richtung) Default: 0 Methoden ------------------------ *???* Signale ------------------------ *???* Beispiele ------------------------------ ... sollten etwas komplexer sein also oben! ... Beispiel für ein Säulenchart mit Groups und Group-Labels. Hier sehen wir drei Charts, bei denen die Group-Labels an den drei möglichen Positionen stehen: body (über den Bars), header (im Header-Bereich) und groups (über beide Bereiche) Beispiel:: on this.parent.TheChart.GroupMetrics = $$("List[KeyValue]", "spacing: 20,header: true"); this.parent.TheChart2.GroupMetrics = $$("List[KeyValue]", "spacing: 20,header: true"); this.parent.TheChart3.GroupMetrics = $$("List[KeyValue]", "spacing: 20,header: true"); off this.parent.TheChart.GroupMetrics = $$("List[KeyValue]", "spacing: 20,header: false"); this.parent.TheChart2.GroupMetrics = $$("List[KeyValue]", "spacing: 20,header: false"); this.parent.TheChart3.GroupMetrics = $$("List[KeyValue]", "spacing: 20,header: false"); 2 Groups this.parent.TheChart.Groups = $$("List[String]", "A,,,B,,,"); this.parent.TheChart2.Groups = $$("List[String]", "A,,,B,,,"); this.parent.TheChart3.Groups = $$("List[String]", "A,,,B,,,"); 3 Groups this.parent.TheChart.Groups = $$("List[String]", "A,,B,,C,"); this.parent.TheChart2.Groups = $$("List[String]", "A,,B,,C,"); this.parent.TheChart3.Groups = $$("List[String]", "A,,B,,C,"); 0 Groups this.parent.TheChart.Groups = null; this.parent.TheChart2.Groups = null; this.parent.TheChart3.Groups = null;