chartcartesian — u_pbt_chartcartesian #
← Komponentenreferenz · Inhalt des Handbuchs
Kartesisches Diagramm: Säulen, Balken, Linien, Flächen und Punktwolken, auf einer Kategorienachse und einer oder zwei Wertachsen. Der Typ wird je Reihe gesetzt.
▶ Live ansehen — Demoanwendung, Kachel Cartesian chart : die Vorschau, der erzeugende Code und diese Seite nebeneinander.
Kurz gefasst #
| Userobject | u_pbt_chartcartesian |
| Elementklasse | n_pbt_chartcartesian_series (of_item(key)) · n_pbt_chartcartesian_axis (of_axis(axis)) |
| Dient zu | Werte entlang einer Achse vergleichen — Monate, Produkte, Regionen |
| Prinzip | Sie setzen die Kategorien, dann die Reihen; Skalen, Gitter und Animation sind unsere Sache |
Schnellstart #
// Local variables
string ls_months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun"}
double ld_sales[] = {420, 510, 480, 620, 700, 660}
// The categories FIRST : they fix how many values a series carries
uo_chart.of_set_categories(/*labels*/ ls_months)
uo_chart.of_add_series(/*key*/ "sales", /*label*/ "Revenue", /*type*/ u_pbt_chartcartesian.TYPE_BAR, /*values*/ ld_sales)
Der Typ gehört zur REIHE, nicht zur Komponente #
Das ist die Entscheidung, aus der alles Übrige folgt. Eine Komponente je Typ — eine für Balken, eine für Linien — kann nie eine Kombination erzeugen: Balken mit einer Ziellinie darüber, auf einer zweiten Achse. Und genau das ist die meistgefragte Form auf einem Dashboard.
Hier gibt es eine Komponente, und jede Reihe trägt ihr is_type (TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER, TYPE_STEPLINE). Den Typ einer Reihe zu ändern lässt die anderen unberührt.
ib_secondary legt eine Reihe auf die zweite Wertachse. Das lässt eine Auftragszahl und einen Umsatz zusammen leben: ohne sie ist eine der beiden eine flache Linie an der Achse.
of_set_categorieskommt vor den Reihen: Ihre Anzahl legt fest, wie viele Werte jede Reihe tragen muss.
// Local variables
double ld_target[] = {400, 500, 550, 600, 680, 720}
// Bars and a line in the SAME chart : the type belongs to the series
uo_chart.of_add_series(/*key*/ "target", /*label*/ "Target", /*type*/ u_pbt_chartcartesian.TYPE_LINE, /*values*/ ld_target)
// And its own scale, when the two do not share a unit
uo_chart.of_item(/*key*/ "target").ib_secondary = true
Eigenschaften #
| Eigenschaft | Typ | Standard | Rolle |
|---|---|---|---|
is_title | string | "" | Diagrammtitel, oben angezeigt |
ib_show_legend | boolean | true | Zeigt die Legende. Ein Klick auf einen Eintrag blendet seine Reihe aus — der billigste Weg, zwei von fünf Reihen zu vergleichen |
is_legend_location | string | bottom | Wohin die Legende gehört (Konstanten LEGEND_*): über oder unter die Zeichnung oder daneben — START/END setzen sie als Spalte an eine Seite, und die Zeichnung tritt den Platz ab. START/END sind logisch: Sie folgen der Leserichtung. Eine unbekannte Position ist unten und wird so zurückgelesen |
ib_show_grid | boolean | true | Die Linien hinter der Zeichnung, bei jedem runden Wert. Ohne sie bleibt nur die Form lesbar, nie ein Wert |
ib_value_tooltip | boolean | true | Das Wertefeld: Fährt die Maus über eine Kategorie, erscheinen alle Reihen und ihr dortiger Wert auf einmal, und ein Fadenkreuz markiert die Spalte. Es ist nicht is_tooltip (geerbt), der Tooltip der ganzen Komponente — dieses folgt dem Zeiger und sagt, woraus das Diagramm besteht. Jede Reihe schreibt ihre Zeile mit ihrem eigenen is_label_format; ein fehlender Wert hat keine Zeile. Der Tooltip einer Reihe (ihr is_tooltip) wird in dieses Feld geschrieben, unter die Zeile der Reihe, auf die gezeigt wird, auch bei false |
is_orientation | string | vertical | Säulen oder Balken (Konstanten ORIENTATION_*). Dreht den ganzen Bezugsrahmen, Linien und Flächen eingeschlossen |
ib_stacked | boolean | false | Stapelt die Balkenreihen, statt sie nebeneinander zu setzen; die Flächenreihen stapeln sich untereinander — nie Balken mit Flächen. Eine Linie wird nie gestapelt: Sie nennt ein Niveau. Die Balken der zweiten Achse bilden ihren eigenen Stapel, neben dem der Hauptachse |
is_stack_mode | string | value | Summe oder Anteil (Konstanten STACK_*). Bei percentage wird jeder Stapel auf 100 gebracht: Die Achse liest dann Anteile, keine Summen — bis -100, wenn Anteile negativ sind. Ohne Stapelung ohne Bedeutung |
ib_enabled | boolean | true | Ausgegraut: die Komponente zeigt weiter, was sie zeigt — ein Diagramm ohne Daten ist etwas anderes als ein Diagramm, das die Anwendung abgeschaltet hat — antwortet aber nicht mehr: kein Klick, keine Taste, kein Legendeneintrag, und sie verlässt die Tab-Reihenfolge. Standard true |
ib_animated | boolean | true | Das Diagramm kommt animiert an: Die Formen steigen von der Achse auf — das ganze Diagramm, wenn es von leer zu gezeichnet wechselt und wenn eine Reihe hinzukommt. Neue Werte gleiten an ihren Platz, und eine Form, die ein Live-Diagramm anhängt (of_append_values), steigt allein auf: Ein Dashboard, das sich selbst auffrischt, kann die Animation behalten. Ein auf weniger Bewegung eingestellter Arbeitsplatz animiert nicht, es sei denn, die Anwendung besteht darauf (PBT_SetAnimationPolicy, Abschnitt 4.8) |
ii_anim_duration | integer | 450 | Dauer dieser Ankunft, in Millisekunden (0 bis 5000) |
is_anim_easing | string | ease-out | Kurve des Auftritts (EASING_*-Konstanten): linear, ease-out, back-out schießt über und kehrt zurück, bounce-out springt, elastic-out schnappt. Sie gibt der Animation ihren Charakter |
ii_anim_delay | integer | 0 | Versatz zwischen zwei Reihen bei der Ankunft, in Millisekunden (0 bis 1000). Sie kommen dann nacheinander statt alle zugleich, was dem Diagramm seine Leserichtung gibt. 0 = alle gleichzeitig |
is_format | string | "" | Das Format aller Zahlen, die das Diagramm schreibt — Wertachsen, Datenbeschriftungen und Wertepanel — in der Syntax eines DataWindow-Formats: #,##0.00, $#,##0, #,##0 "Stück", Abschnitte positiv;negativ;null. Die Trennzeichen sind die der Anzeigesprache. Eine Achse kann ihr eigenes tragen (of_axis(AXIS_VALUE2).is_format), das diesem vorgeht. Leer (oder ein nicht numerisches Format) = die Zahl, wie sie ist, auf das Tausendstel |
is_theme_style | string | "" | Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen |
is_theme_mode | string | "" | Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent des Themas) |
is_tooltip | string | "" | Einfacher Tooltip beim Überfahren der Komponente |
is_super_tooltip_title | string | "" | Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip) |
is_super_tooltip_text | string | "" | Text des erweiterten Tooltips (Rich-Markup erlaubt) |
is_super_tooltip_image | string | "" | Bild des erweiterten Tooltips |
Methoden #
| Methode | Rolle | |
|---|---|---|
of_set_categories ( string as_labels[] ) | Die Beschriftungen der Kategorienachse — Text: Ein Auszeichnungs-Tag darin wird entfernt, damit Achse, Panel und #x# dasselbe sagen. Vor den Reihen aufrufen. Liefert 0 nach dem Anwenden, -2, wenn die Komponente nicht erstellt ist | |
of_set_value_labels ( string as_labels[] ) | Beschriftungen auf der Werteachse. Leer — der Normalfall — trägt diese Achse Zahlen. Gefüllt trägt sie Bänder wie die Kategorieachse: der zweifach kategoriale Rahmen einer Wärmekarte. Liefert 0 nach dem Anwenden, -2, wenn die Komponente nicht erstellt ist | |
of_get_value_labels ( ref string as_labels[] ) | Füllt as_labels[] mit dem, was die Werteachse jetzt trägt, und liefert die Anzahl. Null = sie trägt Zahlen; eine Beschriftung mit ` | ` wird ganz zurückgelesen |
of_get_categories ( ref string as_labels[] ) | Füllt as_labels[] mit den Kategorien, die das Diagramm jetzt trägt — nachdem of_append_categories die ältesten entfernt hat, nachdem of_from_datastore sie gelesen hat — und liefert ihre Anzahl | |
of_get_last_error ( ) | Warum der letzte Aufruf abgelehnt wurde (eine Rolle von of_map, die die Zeilen nicht haben, eine NULL-Grenze, eine Position außerhalb einer Reihe…), oder wie viele Zeilen das letzte of_from_datastore übersprungen hat und warum; sonst der letzte Fehler der DLL, wie bei jeder Komponente | |
of_add_heat_series ( string as_key, string as_label, long al_x[], long al_y[], double ad_weight[] ) | Eine Wärmekarte: eine Zelle je Paar (Kategorie, Wertebeschriftung), nach ihrem Gewicht eingefärbt. al_x ist der Rang der Kategorie, al_y der Rang der Beschriftung, beide ab 1 — die Ränge eines PowerScript-Feldes, die eine Doppelschleife ohne Rechnerei schreibt. Beide Listen zuerst setzen. Ein NULL-Gewicht ist eine leere Zelle: Dort wird nichts gezeichnet, beschriftet oder angeklickt. Liefert 0 nach dem Hinzufügen, -5, wenn der Schlüssel leer ist, / oder ` | enthält oder schon vergeben ist, -2`, wenn die Komponente nicht erstellt ist |
of_add_ohlc_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] ) | Eine OHLC-Reihe: die Spanne von tief bis hoch, links ein Strich für die Eröffnung, rechts einer für den Schluss. Vier Zahlen je Punkt, und die Achse liest sich am Hoch und am Tief — die beiden anderen liegen bauartbedingt dazwischen. Die vier Felder werden auf das kürzeste gekürzt. Liefert 0 nach dem Hinzufügen, -5, wenn der Schlüssel leer ist, / oder ` | enthält oder schon vergeben ist, -2`, wenn die Komponente nicht erstellt ist |
of_add_candle_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] ) | Dieselben vier Zahlen als Kerzen: ein Docht von tief bis hoch und ein gefüllter Körper zwischen Eröffnung und Schluss. Ein Doji — Eröffnung gleich Schluss — behält ein Pixel Körper und bleibt so eine auffindbare Linie. Liefert 0 nach dem Hinzufügen, -5, wenn der Schlüssel leer ist, / oder ` | enthält oder schon vergeben ist, -2`, wenn die Komponente nicht erstellt ist |
of_set_series_ohlc ( string as_key, double ad_open[], double ad_high[], double ad_low[], double ad_close[] ) | Neue Kurse für eine schon vorhandene Finanzreihe. Was of_set_series_values für eine Wertereihe ist. Liefert 0 nach dem Anwenden, -5, wenn keine Reihe diesen Schlüssel trägt oder sie keine Finanzreihe ist, -2, wenn die Komponente nicht erstellt ist | |
of_get_series_ohlc ( string as_key, ref double ad_open[], ref double ad_high[], ref double ad_low[], ref double ad_close[] ) | Füllt die vier Felder mit dem, was die Reihe jetzt trägt, und liefert die Punktzahl. Eine nicht finanzielle Reihe antwortet 0 | |
of_add_series ( string as_key, string as_label, string as_type, double ad_values[] { , long al_color } ) | Fügt eine Reihe mit ihrem Typ hinzu — TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER oder TYPE_STEPLINE; die Überladung nimmt auch ihre Farbe (RGB()), sonst wählt die Palette. Ein NULL-Wert (SetNull) ist eine Lücke: Dort wird nichts gezeichnet, beschriftet oder angeklickt, und eine Linie wird unterbrochen. Ein schon vergebener Schlüssel wird abgelehnt, nie ersetzt: of_set_series_values und der Griff of_item ändern eine bestehende Reihe. Liefert 0 nach dem Hinzufügen, -5, wenn der Typ keiner dieser fünf ist (eine Wärmekarte und die Finanzreihen haben ihre eigene Methode) oder der Schlüssel leer ist, / oder ` | enthält oder schon vergeben ist, -2`, wenn die Komponente nicht erstellt ist |
of_set_series_values ( string as_key, double ad_values[] ) | Neue Werte für eine bereits gezeichnete Reihe, alles andere bleibt. Der Aufruf eines lebenden Dashboards: die Reihe behält ihre Identität, die Formen gleiten, statt zu springen. Ein NULL-Wert ist eine Lücke. Liefert 0 nach dem Anwenden, -5, wenn keine Reihe diesen Schlüssel trägt oder sie Punkte oder Kurse trägt (of_set_series_points, of_set_series_ohlc ersetzen diese), -2, wenn die Komponente nicht erstellt ist | |
of_set_point_color ( string as_key, long al_position, long al_color ) | Die Farbe eines Punktes — der Monat, der seine Grenze überschritten hat, in Rot. al_position zählt ab 1; -1 (oder NULL) gibt dem Punkt die Farbe seiner Reihe zurück. Balken, Linienmarker und Punkte einer Punktwolke übernehmen sie, und sie gleitet in einem Live-Diagramm mit ihrem Punkt. Liefert 0 nach dem Anwenden, -5, wenn keine Reihe diesen Schlüssel trägt, die Position außerhalb der Reihe liegt oder bei einer Wärmekarte oder Finanzreihe (deren Farben sind ihre Skala und ihre Richtung), -2, wenn die Komponente nicht erstellt ist | |
of_get_point_color ( string as_key, long al_position ) | Liefert die Farbe (ein RGB()-Long), die of_set_point_color — oder eine ROLE_COLOR-Spalte — dem Punkt al_position gegeben hat, ab 1 gezählt, oder -1, wenn er keine hat (er nimmt die Farbe seiner Reihe), und bei unbekanntem Schlüssel oder unbekannter Position | |
of_append_values ( string as_key, double ad_values[], long al_max_points ) | Ein Live-Diagramm: hängt neue Werte ans Ende einer Reihe und entfernt die ältesten, sobald sie mehr als al_max_points trägt (0 = keine Grenze). Nur die neuen Werte reisen — die Reihe wird nicht bei jedem Takt erneut gesendet. Zusammen mit of_append_categories verwenden. Die neuen Formen steigen allein auf, die anderen gleiten. Hängen Sie jede Reihe an, mit demselben Maximum wie of_append_categories: Eine vergessene Reihe verschiebt sich gegenüber ihren Kategorien. Liefert 0 nach dem Anwenden, -5, wenn keine Reihe diesen Schlüssel trägt oder sie Punkte oder Kurse trägt, -2, wenn die Komponente nicht erstellt ist | |
of_append_categories ( string as_labels[], long al_max_count ) | Neue Kategorien am Ende der Achse, die ältesten über al_max_count hinaus entfernt (0 = keine Grenze): Die Beschriftungen eines Live-Diagramms gleiten mit seinen Werten. Hängen Sie jede Reihe mit of_append_values und demselben Maximum an. Liefert 0 nach dem Anwenden, -2, wenn die Komponente nicht erstellt ist | |
of_add_point_series ( string as_key, string as_label, double ad_x[], double ad_y[] { , double ad_weight[] } ) | Eine Reihe, die auf beiden Achsen nach Wert platziert wird: x sagt wo entlang der Kategorieachse, y wie hoch. Diese Achse ist dann keine Kategorieachse mehr — sie wird eine zweite Werteachse mit eigenen Teilungen. Eine Überladung nimmt ein Gewicht je Punkt, das die Blase bemisst. Ein NULL-Gewicht behält die Standardgröße, außerhalb der Skala der anderen. Mischen Sie solche Reihen nicht mit Wertereihen in einem Kategoriendiagramm: Die Kategorienbeschriftungen weichen Skalenstrichen. Liefert 0 nach dem Hinzufügen, -5, wenn der Schlüssel leer ist, / oder ` | enthält oder schon vergeben ist, -2`, wenn die Komponente nicht erstellt ist |
of_set_series_points ( string as_key, double ad_x[], double ad_y[], double ad_weight[] ) | Neue Punkte für eine Reihe, die schon welche trägt. Was of_set_series_values für eine Wertereihe ist. Liefert 0 nach dem Anwenden, -5, wenn keine Reihe diesen Schlüssel trägt oder sie Werte oder Kurse trägt, -2, wenn die Komponente nicht erstellt ist | |
of_get_series_points ( string as_key, ref double ad_x[], ref double ad_y[], ref double ad_weight[] ) | Füllt die drei Felder mit dem, was die Reihe jetzt trägt, und liefert die Punktzahl. Eine Wertereihe antwortet nichts in ad_x: Sie hat kein eigenes x | |
of_get_series_values ( string as_key, ref double ad_values[] ) | Füllt ad_values[] mit dem, was die Reihe jetzt trägt, und liefert die Anzahl. Live gelesen : es fragt das Diagramm, nicht die letzte Sendung | |
of_remove_series ( string as_key ) | Entfernt eine Reihe; die anderen behalten ihre Farbe — beim Hinzufügen vergeben — und ihre Sichtbarkeit; ihr Tooltip und ihre Elementfarben gehen mit ihr. Ihr Griff (of_item) wird mit ihr zerstört: ein späteres of_item auf denselben Schlüssel erzeugt einen neuen. Liefert 0 nach dem Entfernen, -5, wenn keine Reihe diesen Schlüssel trägt, -2, wenn die Komponente nicht erstellt ist | |
of_clear ( ) | Leert das Diagramm — Reihen und Kategorien; die Reihengriffe gehen mit ihnen. Die Achsen behalten ihre Einstellungen und ihre Abschnitte. Liefert 0 nach dem Leeren, -2, wenn die Komponente nicht erstellt ist | |
of_from_datastore ( datastore ads ) | Speist das Diagramm aus einem DataStore (einem DataWindow, einem DataWindowChild: Überladungen), wie die Grafik eines DataWindow: eine Spalte der Kategorien, eine Spalte der Werte und, falls vorhanden, eine Spalte der Reihen — eine Reihe je dort gefundenem Wert, ohne sie eine Reihe, nach der Wertespalte benannt. Die Zeilen mit derselben Kategorie und Reihe werden summiert; die Kategorien kommen in der Reihenfolge der Zeilen (sortieren Sie den DataStore); eine Kategorie ohne Zeile ist eine Lücke. Eine Farbspalte färbt ihren Punkt. Eine Spalte spielt eine Rolle, wenn sie so heißt (category, series, value, color) oder wenn of_map es sagt; regionale Zahlen und Datumsangaben werden richtig gelesen. Erneut übergeben, ändert sich das Diagramm an Ort und Stelle: Eine Reihe behält Typ, Farbe und Achse, eine von Hand hinzugefügte Reihe wird nie berührt; eine neue Reihe ist ein Balken. Liefert 0 nach dem Laden (Zeilen, deren Reihe kein Schlüssel sein kann, werden übersprungen: of_get_last_error sagt, wie viele), -5, wenn der DataStore nicht gültig ist oder keine Spalte ROLE_CATEGORY oder ROLE_VALUE spielt (of_get_last_error sagt, welche), -2, wenn die Komponente nicht erstellt ist | |
of_map ( string as_role, string as_column ) | Gibt einer Spalte des DataStore eine Rolle (ROLE_CATEGORY, ROLE_SERIES, ROLE_VALUE, ROLE_COLOR), wenn ihr Name es nicht sagt. Vor of_from_datastore oder danach: Die Zeilen werden neu gelesen. Eine leere Spalte gibt die Rolle der gleichnamigen Spalte zurück. Liefert 0 nach dem Setzen, -5, wenn die Rolle keine ROLE_-Konstante ist oder die Spalte nicht zum letzten DataStore gehört, -2, wenn die Komponente nicht erstellt ist | |
of_reload ( ) | Liest die Zeilen des DataStore (oder DataWindow), der of_from_datastore übergeben wurde, erneut — nach einem Retrieve, einer Eingabe, einem Filter — und ändert das Diagramm an Ort und Stelle: Die Formen gleiten zu ihren neuen Werten. Liefert 0 nach dem Lesen, -5, wenn kein DataStore übergeben wurde oder er nicht mehr gültig ist, -2, wenn die Komponente nicht erstellt ist | |
of_item ( string as_key ) | Liefert einen Reihengriff, um sie später zu ändern | |
of_axis ( string as_axis ) | Liefert einen Achsengriff (AXIS_CATEGORY, AXIS_VALUE, AXIS_VALUE2), um sie danach einzustellen. Jede andere Rolle liefert keinen Griff (IsValid() ist falsch) | |
of_add_axis_section ( string as_axis, string as_key, double ad_from, double ad_to, long al_color ) | Ein Band quer über die Zeichnung, hinter den Daten: „unter 200 ist schlecht“. Unter den Formen gezeichnet, macht es ihnen nie Konkurrenz. Auf der Kategorienachse sind ad_from und ad_to ab 1 gezählte Positionen (2 bis 3 deckt die zweite und dritte Kategorie ab). Eine Farbe -1 (oder NULL) ist eine blasse Lasur des Themenakzents. Liefert 0 nach dem Hinzufügen, -5, wenn die Achse keine der AXIS_* ist, eine Grenze NULL ist oder der Schlüssel leer ist, / oder ` | enthält oder auf dieser Achse schon vergeben ist, -2`, wenn die Komponente nicht erstellt ist |
of_add_axis_threshold ( string as_axis, string as_key, double ad_at, long al_color, integer ai_thickness ) | Eine Linie quer über die Zeichnung bei einem Wert — ein Ziel, eine Grenze. Dasselbe Register wie die Bänder, aber sichtbar gezeichnet. Eine Farbe -1 (oder NULL) zeichnet sie im Themenakzent. Liefert 0 nach dem Hinzufügen, -5, wenn die Achse keine der AXIS_* ist, eine Grenze NULL ist oder der Schlüssel leer ist, / oder ` | enthält oder auf dieser Achse schon vergeben ist, -2`, wenn die Komponente nicht erstellt ist |
of_clear_axis_sections ( string as_axis ) | Entfernt alle Bänder und alle Schwellen einer Achse. Liefert 0 nach dem Leeren, -5, wenn die Achse keine der AXIS_* ist, -2, wenn die Komponente nicht erstellt ist | |
of_remove_axis_section ( string as_axis, string as_key ) | Entfernt ein Band oder eine Schwelle einer Achse: Die anderen bleiben. Liefert 0 nach dem Entfernen, -5, wenn die Achse keine der AXIS_* ist oder keinen Abschnitt mit diesem Schlüssel trägt, -2, wenn die Komponente nicht erstellt ist | |
of_reset ( ) | Leert das Diagramm — Reihen- und Achsengriffe inbegriffen — und setzt alle Eigenschaften auf ihren Ausgangswert zurück. Liefert 0 danach, -2, wenn die Komponente nicht erstellt ist |
Ohne Schlüssel (Demomodus) zeichnet das Diagramm nur seine ersten 3 Reihen, Legende inbegriffen. Die übrigen bleiben im Modell —
of_count,of_get_series_valuesund ihre Griffe sehen sie — und der gesetzte Schlüssel zeigt sie, ohne dass Sie etwas erneut senden müssen.
Ereignisse #
| Ereignis | Ausgelöst wenn |
|---|---|
ue_point_clicked (string as_key, long al_index, double ad_value) | Ein Balken, ein Punkt, eine Zelle oder ein Kurs wurde angeklickt — oder mit Eingabe bestätigt: der Schlüssel der Reihe, die Position des Punktes in der Reihe, ab 1 gezählt, und sein Wert — der Wert des Punktes, welche Form die Reihe auch hat: das y einer Punktwolke, das Gewicht einer Wärmezelle, der Schlusskurs eines Kurses. Auf der Tastatur durchlaufen Links/Rechts die Kategorien, Oben/Unten wählen die Reihe, die das Panel unterstreicht; eine gewählte Punktreihe oder Wärmekarte wird Punkt für Punkt durchlaufen. Eine Lücke hat nichts anzuklicken; der Punkt, auf dem die Tastatur steht, ist umrandet und wird dem Bildschirmleser angesagt |
ue_point_rclicked (string as_key, long al_index, double ad_value, long al_x, long al_y) | Ein Rechtsklick auf einen Balken, einen Punkt, eine Zelle oder einen Kurs — oder die Menütaste (Umschalt+F10) auf dem Punkt, auf dem die Tastatur steht: der Schlüssel der Reihe, die Position ab 1 und der Wert, wie ue_point_clicked sie liefert. Dort öffnen Sie Ihr Menü; al_x, al_y: wo das Menü zu öffnen ist, in Bildschirmpixeln — der Zeiger, oder über die Tastatur (Menütaste, Umschalt+F10) die Mitte der Form des Punkts; ein contextmenu öffnet sich dort unverändert (uo_menu.of_show(al_x, al_y)) |
ue_rclicked ( ) | Ein Rechtsklick auf das Diagramm, wo kein Punkt gezeichnet ist — die Achsen, die leere Zeichnung, die Legende. Ein Rechtsklick auf einen Punkt löst stattdessen ue_point_rclicked aus, nie beide |
ue_series_toggled (string as_key, boolean ab_visible) | Der Benutzer hat eine Reihe per Klick in der Legende aus- oder wieder eingeblendet. Was das Diagramm zeigt, ist dann nicht mehr, was die Anwendung gesendet hat. ib_visible zu setzen ist ein Wert, wie ein Häkchen in einem Kontrollkästchen: Dieses Ereignis meldet die Geste des Benutzers |
Die Animation ist ein Weg hinein, keine Berechnung: Die endgültige Geometrie steht sofort, und nur die Ankunft wird gespielt. Ein nie angezeigtes Diagramm — außerhalb des Bildschirms geboren, auf einem Reiter, den niemand öffnet — zeigt daher stillschweigend die richtigen Balken.
Elementeigenschaften #
| Eigenschaft | Typ | Standard | Rolle |
|---|---|---|---|
is_label | string | "" | Der Name der Reihe, wie ihn die Legende zeigt |
is_type | string | bar | bar · line · area · scatter · stepline (Konstanten TYPE_*). Ändert die Zeichnung dieser Reihe allein — das macht ein kombiniertes Diagramm aus. Nur ein Typ derselben Familie wird angenommen: eine Wertereihe unter bar, line, area, scatter und stepline, eine Finanzreihe zwischen ohlc und candle; jeder andere wird ignoriert, und is_type liest den behaltenen Typ zurück |
il_color | long | -1 | Farbe der Reihe (RGB()). -1, solange keine gesetzt ist: die Palette wählt, beim Hinzufügen, und die Reihe behält sie: Das Entfernen einer anderen Reihe färbt sie nie um. Ein Punkt kann seine eigene nehmen (of_set_point_color). Die geerbten Elementfarben (il_accent, il_back_color, il_text_color und ihre Hover-Varianten) haben keine Wirkung auf eine Reihe: il_color entscheidet |
ib_visible | boolean | true | false blendet eine Reihe aus, ohne sie zu entfernen — die Legende behält den Weg zurück. Wie ein Kontrollkästchen ist es ein gesetzter Wert: ue_series_toggled meldet den Klick des Benutzers in der Legende |
ib_secondary | boolean | false | Zeichnet die Reihe auf der zweiten Achse. So leben eine Anzahl und ein Betrag im selben Diagramm |
ib_data_labels | boolean | false | Schreibt den Wert jedes Punktes daneben. Standardmäßig aus: Bei fünfzig Punkten verdecken die Beschriftungen die Zeichnung, die sie erklären |
is_label_format | string | "" | Was jede Beschriftung und jede Zeile des Panels sagt: #y# der Wert, #x# die Kategorie (das x einer Punktreihe, die Spalte einer Wärmezelle), #v# die Zeile einer Wärmezelle, #label# der Name der Reihe, #open# #high# #low# #close# die Kurse; der Rest wird so geschrieben, wie er steht — "$#y#K". Leer = der Wert allein. Eine Beschriftung in einem gestapelten Balken nimmt Schwarz oder Weiß, je nachdem, was ihr Balken trägt |
id_smoothness | double | 1 | Nur Linien und Flächen: wie rund die Linie gezeichnet wird, 0 = gerade Segmente, 1 = voll gekrümmt, so wie LiveCharts sie zeichnet. Eine Treppenlinie ignoriert es — sie sagt, dass der Pegel bis zur nächsten Kategorie GEHALTEN hat, eine Kurve würde sagen, er sei gedriftet. Eine Kurve kann über ihre Punkte hinausgehen; sie wird am Rahmen der Zeichnung abgeschnitten und malt nie über die Achsenbeschriftungen |
ib_fill | boolean | true | Linien und Flächen: die Lasur unter dem Strich, bis zur Achse, im Farbton der Reihe. Das Entfernen ist der bewusste Akt — für eine Linie, die über etwas anderem liegt (Säulen, farbige Achsenbänder), das die Lasur verdecken würde |
il_fill_color | long | -1 | Die Farbe dieser Lasur. -1 = die der Linie selbst |
is_marker | string | "circle" | Linien, Stufenlinien und Punktwolken: die FORM des Markers auf jedem Punkt (Konstanten MARKER_*: none, circle, square, triangle, diamond). Keine Dekoration — zwei sich kreuzende Linien, in Grau gedruckt, unterscheiden sich durch ihre Marker und durch nichts sonst |
ii_thickness | integer | 2 | Linien und Flächen: die Strichstärke in Pixeln |
il_point_count | long | 0 | Wie viele Punkte diese Reihe trägt — Werte, (x, y)-Paare oder Kurse (nur lesen). Ein long: Eine Live-Reihe kann mehr als 32 767 behalten |
il_cold_color | long | -1 | Nur Wärmekarten: das KALTE Ende der Skala, der leichteste Wert. -1 = die eigene Skala der Komponente, ein einziges Blau, von sehr blass bis kräftig |
il_mid_color | long | -1 | Die MITTLERE Stufe. Drei Stufen und nicht zwei: Von einem Ende zum anderen zu interpolieren verwäscht die Mitte der Skala, wo die meisten Werte liegen. -1 = das mittlere Blau der Komponente |
il_hot_color | long | -1 | Das HEISSE Ende, der schwerste Wert. Die Legende zeigt diese Farbe. -1 = das kräftige Blau der Komponente |
il_up_color | long | -1 | Nur Finanzreihen: die Farbe eines Punktes, der über seiner Eröffnung schließt. -1 = das Grün der Komponente |
il_down_color | long | -1 | Und die eines Punktes, der darunter schließt. Zwei Farben, weil die Richtung das ist, wofür man ein solches Diagramm liest — eine einzige würde sie verbergen. -1 = das Rot der Komponente |
is_tooltip | string | "" | Ihr Tooltip, in das Wertefeld geschrieben, direkt unter die Zeile der Reihe — nur wenn sie die Reihe ist, auf die gezeigt wird (ihr Balken, Punkt oder ihre Linie unter der Maus, oder die mit Auf / Ab per Tastatur gewählte Reihe), nie für die anderen Reihen der Spalte, nie als zweite Blase. Eine Spalte, über der keine Form gezeichnet ist, zeigt auf keine Reihe. Mit ib_value_tooltip auf false öffnet sich das Feld trotzdem dafür, ohne die Zahlen. Eine Punktreihe oder eine Heatmap zeigt ihn in dem Feld, das die Tastatur auf ihrem Punkt öffnet. Markup erlaubt |
is_super_tooltip_title | string | "" | Der fette Titel ihres Tooltips, im Feld unter ihrer Zeile geschrieben |
is_super_tooltip_text | string | "" | Der Text ihres Tooltips, im Feld. Markup erlaubt |
is_super_tooltip_image | string | "" | Ein Bild oben in ihrem Tooltip, im Feld (Bundle-Pfad, absoluter Pfad oder resources.dll:name) |
Achseneigenschaften #
| Eigenschaft | Typ | Standard | Rolle |
|---|---|---|---|
is_title | string | "" | Titel entlang der Achse. Leer = kein Titel und kein reservierter Platz dafür. Der Tooltip und die Elementfarben, die ein Achsen-Handle erbt (is_tooltip, is_super_tooltip_*, il_accent, il_back_color, il_text_color…), haben keine Wirkung auf eine Achse |
id_min | double | NULL | Vorgegebene Untergrenze. Sie gewinnt gegen die Daten und wird nicht gerundet: Wer 0 schreibt, meint 0. NULL (SetNull) gibt nichts vor: Die Achse folgt wieder ihren Daten, und eine freie Grenze liest sich NULL (IsNull), nie 0. Frei nimmt eine Wertachse die Null nur auf, wenn ein Balken oder eine Fläche darauf steht: Kurse und Linien werden auf ihrer eigenen Spanne gelesen |
id_max | double | NULL | Vorgegebene Obergrenze, gleiche Regel. Was darüber hinausgeht, wird am Rand der Zeichnung abgeschnitten |
id_step | double | 0 | Abstand zwischen zwei Gitterlinien, in Werten. 0 = ein runder Schritt aus dem Bereich |
ii_label_rotation | integer | 0 | Drehung der Beschriftungen dieser Achse, in Grad (-90 bis 90) — Kategorienamen oder Wertteilungen. Zwölf Monatsnamen passen nur schräg unter ein Diagramm; passen sie immer noch nicht, schreibt das Diagramm einen von N, den ersten und den letzten immer |
ib_separator | boolean | true | Ihre Gitterlinien. Eine Kategorieachse braucht sie selten, eine Werteachse fast immer |
ii_section_count | integer | 0 | Wie viele Bänder und Schwellen diese Achse trägt (nur lesen) |
ib_logarithmic | boolean | false | Nur Wertachsen: eine logarithmische Skala, in Dekaden geteilt (1, 10, 100…), jede Dekade gleich hoch — für Zahlen über mehrere Größenordnungen. Null und negative Werte haben darauf keinen Platz und werden nicht gezeichnet |
is_format | string | "" | Das Format dieser Achse — ihre Teilungen sowie Beschriftungen und Panel der darauf gezeichneten Reihen — über dem is_format des Diagramms: ein Betrag auf der einen Seite, eine Bestellanzahl auf der anderen. Gleiche Syntax (#,##0, 0.0 "u"…). Leer = das Format des Diagramms |
Beispiele #
Die Animation zum Bildschirm passend einstellen #
// A dashboard that refreshes every few seconds : no arrival animation
uo_chart.ib_animated = false
// Elsewhere, a slower arrival that is actually seen
uo_chart.ii_anim_duration = 1200
Die Zeilen hinter einem Punkt öffnen #
// Event ue_point_clicked of uo_chart : the series key, the position of the
// point (from 1) and its value - enough to open the rows behind it
// Local variables
string ls_month
// On a series of values, the position IS the rank of the category
ls_month = is_months[al_index]
wf_open_orders(/*series*/ as_key, /*month*/ ls_month, /*amount*/ ad_value)
Ein lebendiges Dashboard #
// Timer event of the window : new values for the same series, so the bars
// SLIDE to their new height instead of replaying their arrival
// Local variables
double ld_sales[]
// Read the figures, then hand them to the series already on the chart
ld_sales = wf_read_sales()
uo_chart.of_set_series_values(/*key*/ "sales", /*values*/ ld_sales)
Ein gleitendes Live-Diagramm #
// Timer event of the window, every second : ONE new reading. Only that value
// travels ; past sixty, the oldest leaves on both the axis and the series
// Local variables
string ls_time[]
double ld_cpu[]
// The time of the reading on the axis, the reading itself in the series
ls_time[1] = String(Now(), "hh:mm:ss")
ld_cpu[1] = wf_read_cpu()
uo_chart.of_append_categories(/*labels*/ ls_time, /*max_count*/ 60)
uo_chart.of_append_values(/*key*/ "cpu", /*values*/ ld_cpu, /*max_points*/ 60)
Ein fehlender Messwert und das Diagramm als Bild #
// March was not measured : a NULL value is a gap, the line is cut there
// Local variables
double ld_temp[] = {18.5, 19.2, 0, 21.4}
// The third reading is missing : NULL, not zero
SetNull(ld_temp[3])
uo_chart.of_add_series(/*key*/ "temp", /*label*/ "Temperature", /*type*/ u_pbt_chartcartesian.TYPE_LINE, /*values*/ ld_temp)
// The chart as it is on screen, title and legend included, to a PNG file
uo_chart.of_save_as_png(/*path*/ "C:\Reports\temperature.png")
Ein Band und ein Ziel auf der Wertachse #
// A pale red band below 200 and a target line at 600, behind the bars
uo_chart.of_add_axis_section(/*axis*/ u_pbt_chartcartesian.AXIS_VALUE, /*key*/ "low", /*from*/ 0, /*to*/ 200, /*color*/ RGB(/*red*/ 255, /*green*/ 220, /*blue*/ 220))
uo_chart.of_add_axis_threshold(/*axis*/ u_pbt_chartcartesian.AXIS_VALUE, /*key*/ "target", /*at*/ 600, /*color*/ RGB(/*red*/ 200, /*green*/ 70, /*blue*/ 70), /*thickness*/ 2)
// The value axis says what it measures
uo_chart.of_axis(/*axis*/ u_pbt_chartcartesian.AXIS_VALUE).is_title = "Sales ($K)"
Ein Diagramm aus einem DataStore #
// The month on the category axis, one series per product category, the amounts
// of the rows summed by the chart - what the graph of a DataWindow does
// Local variables
datastore lds_sales
// Your DataStore and its Retrieve, sorted : the categories come in the order of the rows
lds_sales = create datastore
lds_sales.DataObject = "d_sales"
lds_sales.SetTransObject(SQLCA)
lds_sales.Retrieve()
lds_sales.SetSort("month A")
lds_sales.Sort()
// Which column plays which role, then ONE call reads every row
uo_chart.of_map(/*role*/ u_pbt_chartcartesian.ROLE_CATEGORY, /*column*/ "month")
uo_chart.of_map(/*role*/ u_pbt_chartcartesian.ROLE_SERIES, /*column*/ "category")
uo_chart.of_map(/*role*/ u_pbt_chartcartesian.ROLE_VALUE, /*column*/ "amount")
uo_chart.of_from_datastore(/*ads*/ lds_sales)
// Later, the rows changed (an edit, a new Retrieve) : read again IN PLACE, the
// bars slide and every series keeps what you set on it
lds_sales.Retrieve()
uo_chart.of_reload()
Die Farbe eines Punktes, ein Menü auf einem anderen #
// May passed its limit : ONE bar of the series in red, the others keep their colour
uo_chart.of_set_point_color(/*key*/ "sales", /*position*/ 5, /*color*/ RGB(/*red*/ 200, /*green*/ 40, /*blue*/ 40))
// Event ue_point_rclicked of uo_chart : a menu about the point under the mouse
// Local variables
m_point lm_menu
// Remember which point the menu is about, then open it where the pointer is
is_menu_series = as_key
il_menu_position = al_index
lm_menu = create m_point
lm_menu.m_popup.PopMenu(w_main.PointerX(), w_main.PointerY())
destroy lm_menu
Bewährte Praxis #
- Setzen Sie die Kategorien vor den Reihen. Ihre Anzahl sagt, was eine Reihe enthalten muss; umgekehrt geht es nicht.
- Eine zweite Achse wird begründet, nicht erlitten. Zwei Skalen in einer Zeichnung täuschen das Auge: Holen Sie sie nur hervor, wenn die Einheiten wirklich verschieden sind.
- Schalten Sie die Animation auf einem sich auffrischenden Dashboard ab. Eine Ankunft, die alle fünf Sekunden neu beginnt, endet nie und ermüdet, statt zu helfen.
- Balken beginnen bei null, und die Komponente hält sich daran: Die Null kommt in die Achse, sobald ein Balken oder eine Fläche darauf steht. Ein abgeschnittenes Balkendiagramm übertreibt jeden Abstand. Linien, Punktwolken und Kurse werden auf ihrer eigenen Spanne gelesen.
- Das Diagramm behält seine mathematische Richtung in einer Rechts-nach-links-Anwendung: Kategorien von links nach rechts, Wertachse links. Nur die Legende
START/ENDfolgt der Leserichtung. - Stapeln, um eine Summe zu lesen; nebeneinander, um zu vergleichen. Das sind nicht zwei Stile, das sind zwei verschiedene Fragen.
- Hängen Sie jede Reihe an in einem Live-Diagramm:
of_append_categories, dannof_append_valuesfür jede, mit demselben Maximum — eine vergessene Reihe rutscht unter die Nachbarkategorie. - Eine Lücke ist keine Null. Ein NULL-Wert wird weder gezeichnet noch beschriftet noch angeklickt; ein NULL-Gewicht lässt die Zelle einer Wärmekarte leer.
ue_point_clickedliefert den Rang: Nutzen Sie ihn, um genau die Liste hinter diesem Punkt zu öffnen, nicht die Suchmaske.
Vom gemeinsamen Sockel geerbt #
Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.
| Mitglieder | Rolle | Beschrieben in |
|---|---|---|
of_count · of_keys_at · of_has | Durchlaufen, was die Komponente enthält | 3.2 Die Items |
of_reset | Die Komponente zurücksetzen | 3.6 Eine Komponente zurücksetzen: of_reset() |
of_register_shortcut · of_clear_shortcuts | Tastenkürzel der Komponente | 3.5 Tastenkombinationen |
of_is_created · of_is_ready · of_get_last_error | Ob sie entstanden ist, ob sie bereit ist, was fehlschlug | 3.7 Diagnose |
of_save_as_png · of_save_as_jpg | Die Darstellung als Bild exportieren | 3.8 Die Darstellung als Bild exportieren |
of_set_redraw | Änderungen zu einem einzigen Neuzeichnen bündeln | 3.10 Best Practices |
of_preload_icons | Symbole ohne Verzögerung | Sofortige Anzeige: of_icon |
of_set_translation | Eine Beschriftung der Komponente übersetzen | 5.2 Eine Beschriftung anpassen: of_set_translation |
of_focus_webview | Der Komponente den Fokus geben | 6.4 Tastatur und Fokus |
of_print · of_print_to_pdf | Drucken oder ein PDF schreiben | 6.9 Drucken |
of_set_property · of_get_property · of_component_name | Eine Eigenschaft über ihren Namen steuern | 3.1 Die Eigenschaften-Engine |
is_accessible_name · is_accessible_description | Name und Beschreibung, die ein Bildschirmleser sagt | 3.4 Optionale Eigenschaften und Events |
Zwei Helfer werden nicht geerbt: of_icon und of_escape_markup liegen auf n_pbt_utils. Deklarieren Sie eines — n_pbt_utils lnv_utils, nichts zu erzeugen — und rufen Sie sie darauf auf.