chartcartesian — u_pbt_chartcartesian #
← Riferimento dei componenti · Sommario della guida
Grafico cartesiano: colonne, barre, linee, aree e nuvole di punti, su un asse di categorie e uno o due assi di valori. Il tipo si imposta per serie.
▶ Vederlo dal vivo — Applicazione dimostrativa, riquadro Cartesian chart : l'anteprima, il codice che lo produce e questa pagina, affiancati.
In breve #
| Userobject | u_pbt_chartcartesian |
| Classe di elementi | n_pbt_chartcartesian_series (of_item(key)) · n_pbt_chartcartesian_axis (of_axis(axis)) |
| Serve a | Confrontare valori lungo un asse — mesi, prodotti, regioni |
| Principio | Voi ponete le categorie poi le serie; le scale, la griglia e l'animazione sono affar nostro |
Avvio rapido #
// 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)
Il tipo appartiene alla SERIE, non al componente #
È la decisione da cui discende tutto il resto. Un componente per tipo — uno per le barre, uno per le linee — non può mai produrre un combinato: barre sormontate da una linea di obiettivo, su un secondo asse. Ed è proprio la forma più richiesta di un cruscotto.
Qui c'è un solo componente, e ogni serie porta il suo is_type (TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER, TYPE_STEPLINE). Cambiare il tipo di una serie non tocca le altre.
ib_secondary mette una serie sul secondo asse dei valori. È ciò che permette a un numero di ordini e a un fatturato di convivere: senza, una delle due è una linea piatta a filo dell'asse.
of_set_categoriesviene prima delle serie: il loro numero fissa quanti valori ogni serie deve portare.
// 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
Proprietà #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_title | string | "" | Titolo del grafico, mostrato sopra |
ib_show_legend | boolean | true | Mostra la legenda. Cliccare una voce nasconde la sua serie — il modo più economico di confrontare due serie su cinque |
is_legend_location | string | bottom | Dove va la legenda (costanti LEGEND_*): sopra o sotto il tracciato, oppure accanto — START/END la mettono in colonna su un lato, e il tracciato le cede lo spazio. START/END sono logiche: seguono il senso di lettura. Una posizione sconosciuta vale il basso, e si rilegge così |
ib_show_grid | boolean | true | Le righe di sfondo, a ogni valore tondo. Senza, resta leggibile solo la forma, mai un valore |
ib_value_tooltip | boolean | true | Il pannello dei valori: quando il mouse passa su una categoria, tutte le serie e il loro valore lì, in una volta, e un mirino segna la colonna. Non è is_tooltip (ereditato), che è il tooltip dell'intero componente — questo segue il puntatore e dice di cosa è fatto il grafico. Ogni serie scrive la sua riga con il proprio is_label_format; un valore assente non ha riga. Il tooltip di una serie (il suo is_tooltip) è scritto in questo pannello, sotto la riga della serie puntata, anche a false |
is_orientation | string | vertical | Colonne o barre (costanti ORIENTATION_*). Ruota tutto il sistema di riferimento, linee e aree comprese |
ib_stacked | boolean | false | Impila le serie di barre invece di affiancarle; le serie di aree si impilano tra loro — mai le barre con le aree. Una linea non si impila mai: dice un livello. Le barre del secondo asse formano la loro pila, accanto a quella dell'asse principale |
is_stack_mode | string | value | Somma o quota (costanti STACK_*). In percentage ogni pila è portata a 100: l'asse legge allora quote, non totali — fino a -100 quando alcune quote sono negative. Non significa nulla fuori dall'impilamento |
ib_enabled | boolean | true | In grigio: il componente continua a mostrare ciò che mostra — un grafico senza dati non è la stessa cosa di un grafico che l'applicazione ha spento — ma smette di rispondere: né clic, né tasti, né voci di legenda, ed esce dall'ordine di tabulazione. true per impostazione predefinita |
ib_animated | boolean | true | Il grafico arriva animato: le forme salgono dall'asse — l'intero grafico quando passa da vuoto a disegnato e quando si aggiunge una serie. I nuovi valori scivolano al loro posto, e una forma che un grafico in diretta aggiunge (of_append_values) sale da sola: un cruscotto che si aggiorna può tenere l'animazione. Una postazione impostata su meno movimento non anima, a meno che l'applicazione non insista (PBT_SetAnimationPolicy, sezione 4.8) |
ii_anim_duration | integer | 450 | Durata di quell'arrivo, in millisecondi (da 0 a 5000) |
is_anim_easing | string | ease-out | Curva dell'arrivo (costanti EASING_*): linear, ease-out, back-out che supera e torna, bounce-out che rimbalza, elastic-out che scatta. È lei a dare carattere all'animazione |
ii_anim_delay | integer | 0 | Sfasamento tra due serie all'arrivo, in millisecondi (da 0 a 1000). Entrano allora una dopo l'altra invece di comparire insieme, il che dà al grafico il suo senso di lettura. 0 = tutte insieme |
is_format | string | "" | Il formato di tutti i numeri che il grafico scrive — assi dei valori, etichette e pannello dei valori — nella sintassi di un formato DataWindow: #,##0.00, $#,##0, #,##0 "unità", sezioni positivo;negativo;zero. I separatori sono quelli della lingua di visualizzazione. Un asse può portare il suo (of_axis(AXIS_VALUE2).is_format), che prevale su questo. Vuoto (o un formato non numerico) = il numero così com'è, al millesimo |
is_theme_style | string | "" | Stile visivo del componente (costanti THEME_STYLE_*); vuoto = quello dell'applicazione, seguito a ogni cambio |
is_theme_mode | string | "" | Variante chiara o scura (costanti THEME_MODE_*); vuoto = quella dell'applicazione, seguita a ogni cambio |
il_theme_accent | long | -1 | Colore di accento di questo componente (-1 = accento del tema) |
is_tooltip | string | "" | Descrizione comando semplice mostrata al passaggio sul componente |
is_super_tooltip_title | string | "" | Titolo della descrizione arricchita (prevale su is_tooltip) |
is_super_tooltip_text | string | "" | Testo della descrizione arricchita (markup ricco accettato) |
is_super_tooltip_image | string | "" | Immagine della descrizione arricchita |
Metodi #
| Metodo | Ruolo | |
|---|---|---|
of_set_categories ( string as_labels[] ) | Le etichette dell'asse delle categorie — testo: un tag di markup al loro interno viene tolto, così l'asse, il pannello e #x# dicono la stessa cosa. Da chiamare prima delle serie. Restituisce 0 una volta applicato, -2 se il componente non è creato | |
of_set_value_labels ( string as_labels[] ) | Etichette sull'asse dei valori. Vuoto — il caso normale — quell'asse porta numeri. Riempito, porta fasce come l'asse delle categorie: il riquadro a due categorie in cui si disegna una mappa di calore. Restituisce 0 una volta applicato, -2 se il componente non è creato | |
of_get_value_labels ( ref string as_labels[] ) | Riempie as_labels[] con ciò che l'asse dei valori porta ora e restituisce il numero. Zero = porta numeri; un'etichetta che contiene ` | ` si rilegge intera |
of_get_categories ( ref string as_labels[] ) | Riempie as_labels[] con le categorie che il grafico porta ora — dopo che of_append_categories ha tolto le più vecchie, dopo che of_from_datastore le ha lette — e restituisce il loro numero | |
of_get_last_error ( ) | Perché l'ultima chiamata è stata rifiutata (un ruolo di of_map che le righe non hanno, un limite NULL, una posizione fuori da una serie…), o quante righe l'ultimo of_from_datastore ha scartato e perché; altrimenti l'ultimo errore della DLL, come per ogni componente | |
of_add_heat_series ( string as_key, string as_label, long al_x[], long al_y[], double ad_weight[] ) | Una mappa di calore: una cella per coppia (categoria, etichetta di valore), colorata dal suo peso. al_x è il rango della categoria e al_y quello dell'etichetta, entrambi da 1 — i ranghi di un array PowerScript, che un doppio ciclo scrive senza calcoli. Impostare prima le due liste. Un peso NULL è una cella vuota: lì non si disegna, non si etichetta né si clicca nulla. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene / o ` | , o è già presa, -2` se il componente non è creato |
of_add_ohlc_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] ) | Una serie OHLC: l'intervallo dal minimo al massimo, un trattino a sinistra per l'apertura e uno a destra per la chiusura. Quattro numeri per punto, e l'asse si legge sul massimo e sul minimo — gli altri due vi stanno dentro per costruzione. I quattro array sono troncati al più corto. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene / o ` | , o è già presa, -2` se il componente non è creato |
of_add_candle_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] ) | Gli stessi quattro numeri, disegnati a candele: uno stoppino dal minimo al massimo e un corpo pieno fra apertura e chiusura. Un doji — apertura uguale alla chiusura — conserva un pixel di corpo, per restare una linea che l'occhio ritrova. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene / o ` | , o è già presa, -2` se il componente non è creato |
of_set_series_ohlc ( string as_key, double ad_open[], double ad_high[], double ad_low[], double ad_close[] ) | Nuove quotazioni per una serie finanziaria già tracciata. Ciò che of_set_series_values è per una serie di valori. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave o se non è finanziaria, -2 se il componente non è creato | |
of_get_series_ohlc ( string as_key, ref double ad_open[], ref double ad_high[], ref double ad_low[], ref double ad_close[] ) | Riempie i quattro array con ciò che la serie porta ora e restituisce il numero di punti. Una serie non finanziaria risponde 0 | |
of_add_series ( string as_key, string as_label, string as_type, double ad_values[] { , long al_color } ) | Aggiunge una serie con il suo tipo — TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER o TYPE_STEPLINE; l'overload prende anche il suo colore (RGB()), altrimenti sceglie la tavolozza. Un valore NULL (SetNull) è un buco: lì nulla viene disegnato, etichettato né cliccato, e una linea si interrompe. Una chiave già presa è rifiutata, mai sostituita: of_set_series_values e l'handle of_item cambiano una serie che esiste. Restituisce 0 una volta aggiunta, -5 se il tipo non è uno di questi cinque (una mappa di calore e le serie finanziarie hanno il loro metodo), o se la chiave è vuota, contiene / o ` | , o è già presa, -2` se il componente non è creato |
of_set_series_values ( string as_key, double ad_values[] ) | Nuovi valori per una serie già tracciata, il resto invariato. È la chiamata di un cruscotto vivo: la serie mantiene la sua identità, quindi le forme scivolano invece di saltare. Un valore NULL è un buco. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave o se porta punti o quotazioni (of_set_series_points, of_set_series_ohlc li sostituiscono), -2 se il componente non è creato | |
of_set_point_color ( string as_key, long al_position, long al_color ) | Il colore di un punto — il mese che ha superato il suo limite, in rosso. al_position conta da 1; -1 (o NULL) rende al punto il colore della sua serie. Barre, marcatori di linea e punti di nuvola lo prendono, e scivola con il suo punto in un grafico in diretta. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave, se la posizione è fuori dalla serie, o per una mappa di calore o una serie finanziaria (i loro colori sono la loro scala e il loro senso), -2 se il componente non è creato | |
of_get_point_color ( string as_key, long al_position ) | Restituisce il colore (un long RGB()) che of_set_point_color — o una colonna ROLE_COLOR — ha dato al punto al_position, contato da 1, o -1 quando non ne ha (prende il colore della sua serie), e per una chiave o una posizione sconosciuta | |
of_append_values ( string as_key, double ad_values[], long al_max_points ) | Un grafico in diretta: aggiunge nuovi valori alla fine di una serie e toglie i più vecchi appena ne porta più di al_max_points (0 = nessun limite). Viaggiano solo i nuovi valori — la serie non viene rinviata a ogni tic. Da abbinare a of_append_categories. Le nuove forme salgono da sole, le altre scivolano. Aggiunga ogni serie, con lo stesso massimo di of_append_categories: una serie dimenticata si sfasa rispetto alle sue categorie. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave o se porta punti o quotazioni, -2 se il componente non è creato | |
of_append_categories ( string as_labels[], long al_max_count ) | Nuove categorie alla fine dell'asse, le più vecchie tolte oltre al_max_count (0 = nessun limite): le etichette di un grafico in diretta scivolano con i suoi valori. Aggiunga ogni serie con of_append_values e lo stesso massimo. Restituisce 0 una volta applicato, -2 se il componente non è creato | |
of_add_point_series ( string as_key, string as_label, double ad_x[], double ad_y[] { , double ad_weight[] } ) | Una serie posizionata per valore su entrambi gli assi: x dice dove lungo l'asse delle categorie, y a che altezza. Quell'asse smette allora di essere un asse di categorie — diventa un secondo asse di valori, con le sue graduazioni. Un overload prende un peso per punto, che dimensiona la bolla. Un peso NULL mantiene la dimensione predefinita, fuori dalla scala delle altre. Non mescoli queste serie con serie di valori su un grafico di categorie: le etichette delle categorie lasciano il posto alle graduazioni. Restituisce 0 una volta aggiunta, -5 se la chiave è vuota, contiene / o ` | , o è già presa, -2` se il componente non è creato |
of_set_series_points ( string as_key, double ad_x[], double ad_y[], double ad_weight[] ) | Nuovi punti per una serie che ne porta già. Ciò che of_set_series_values è per una serie di valori. Restituisce 0 una volta applicato, -5 se nessuna serie porta questa chiave o se porta valori o quotazioni, -2 se il componente non è creato | |
of_get_series_points ( string as_key, ref double ad_x[], ref double ad_y[], ref double ad_weight[] ) | Riempie i tre array con ciò che la serie porta ora e restituisce il numero di punti. Una serie di valori non risponde nulla in ad_x: non ha una x propria | |
of_get_series_values ( string as_key, ref double ad_values[] ) | Riempie ad_values[] con ciò che la serie porta ora e restituisce il numero. Lettura viva : interroga il grafico, non l'ultimo invio | |
of_remove_series ( string as_key ) | Rimuove una serie; le altre conservano il colore — preso alla loro aggiunta — e la visibilità; il suo tooltip e i suoi colori di elemento se ne vanno con essa. Il suo handle (of_item) è distrutto con essa: un of_item successivo sulla stessa chiave ne crea uno nuovo. Restituisce 0 una volta rimossa, -5 se nessuna serie porta questa chiave, -2 se il componente non è creato | |
of_clear ( ) | Svuota il grafico — serie e categorie; gli handle delle serie se ne vanno con esse. Gli assi conservano le loro impostazioni e le loro sezioni. Restituisce 0 una volta svuotato, -2 se il componente non è creato | |
of_from_datastore ( datastore ads ) | Alimenta il grafico da un DataStore (un DataWindow, un DataWindowChild: overload), come il grafico di un DataWindow: una colonna di categorie, una colonna di valori e, se c'è, una colonna di serie — una serie per ogni valore trovato, una serie con il nome della colonna dei valori senza di essa. Le righe che condividono una categoria e una serie sono sommate; le categorie arrivano nell'ordine delle righe (ordini il DataStore); una categoria senza riga è un buco. Una colonna di colore colora il suo punto. Una colonna gioca un ruolo quando ne porta il nome (category, series, value, color) o quando of_map lo dice; numeri e date della postazione sono letti correttamente. Ridato, il grafico cambia sul posto: una serie conserva tipo, colore e asse, una serie aggiunta a mano non viene mai toccata; una nuova serie è una barra. Restituisce 0 una volta caricato (le righe la cui serie non può essere una chiave vengono saltate: of_get_last_error dice quante), -5 se il DataStore non è valido o nessuna colonna gioca ROLE_CATEGORY o ROLE_VALUE (of_get_last_error dice quale), -2 se il componente non è creato | |
of_map ( string as_role, string as_column ) | Dà un ruolo a una colonna del DataStore (ROLE_CATEGORY, ROLE_SERIES, ROLE_VALUE, ROLE_COLOR) quando il suo nome non lo dice. Prima di of_from_datastore, o dopo: le righe vengono rilette. Una colonna vuota rende il ruolo alla colonna che ne porta il nome. Restituisce 0 una volta impostato, -5 se il ruolo non è una costante ROLE_ o la colonna non è una dell'ultimo DataStore, -2 se il componente non è creato | |
of_reload ( ) | Rilegge le righe del DataStore (o del DataWindow) dato a of_from_datastore — dopo un Retrieve, una modifica, un filtro — e cambia il grafico sul posto: le forme scivolano verso i nuovi valori. Restituisce 0 una volta riletto, -5 se nessun DataStore è stato dato o non è più valido, -2 se il componente non è creato | |
of_item ( string as_key ) | Restituisce la maniglia di una serie, per modificarla in seguito | |
of_axis ( string as_axis ) | Restituisce la maniglia di un asse (AXIS_CATEGORY, AXIS_VALUE, AXIS_VALUE2), per regolarlo poi. Qualsiasi altro ruolo non restituisce nessuna maniglia (IsValid() è falso) | |
of_add_axis_section ( string as_axis, string as_key, double ad_from, double ad_to, long al_color ) | Una fascia attraverso il tracciato, dietro i dati: « sotto 200 è male ». Disegnata sotto le forme, non fa mai loro concorrenza. Sull'asse delle categorie, ad_from e ad_to sono posizioni contate a partire da 1 (da 2 a 3 copre la seconda e la terza categoria). Un colore -1 (o NULL) è una velatura pallida dell'accento del tema. Restituisce 0 una volta aggiunta, -5 se l'asse non è uno degli AXIS_*, se un limite è NULL o se la chiave è vuota, contiene / o ` | , o è già presa su quell'asse, -2` se il componente non è creato |
of_add_axis_threshold ( string as_axis, string as_key, double ad_at, long al_color, integer ai_thickness ) | Una linea attraverso il tracciato a un valore — un obiettivo, un limite. Stesso registro delle fasce, ma disegnata per essere vista. Un colore -1 (o NULL) la disegna nell'accento del tema. Restituisce 0 una volta aggiunta, -5 se l'asse non è uno degli AXIS_*, se un limite è NULL o se la chiave è vuota, contiene / o ` | , o è già presa su quell'asse, -2` se il componente non è creato |
of_clear_axis_sections ( string as_axis ) | Rimuove tutte le fasce e tutte le soglie di un asse. Restituisce 0 una volta svuotato, -5 se l'asse non è uno degli AXIS_*, -2 se il componente non è creato | |
of_remove_axis_section ( string as_axis, string as_key ) | Rimuove una fascia o una soglia di un asse: le altre restano. Restituisce 0 una volta rimossa, -5 se l'asse non è uno degli AXIS_* o non porta alcuna sezione con questa chiave, -2 se il componente non è creato | |
of_reset ( ) | Svuota il grafico — handle delle serie e degli assi compresi — e riporta tutte le proprietà al loro valore d'origine. Restituisce 0 una volta fatto, -2 se il componente non è creato |
Senza chiave (modalità demo), il grafico disegna solo le sue prime 3 serie, legenda compresa. Le altre restano nel modello —
of_count,of_get_series_valuese i loro handle le vedono — e la chiave impostata le mostra senza che Lei debba rinviare nulla.
Eventi #
| Evento | Scatta quando |
|---|---|
ue_point_clicked (string as_key, long al_index, double ad_value) | Una barra, un punto, una cella o una quotazione è stata cliccata — o confermata con Invio: la chiave della serie, la posizione del punto nella serie, a partire da 1, e il suo valore — quello del punto qualunque sia la forma della serie: la y di una nuvola, il peso di una cella di calore, la chiusura di una quotazione. Alla tastiera Sinistra/Destra percorrono le categorie e Su/Giù scelgono la serie che il pannello sottolinea; una serie di punti o una mappa di calore scelta si percorre punto per punto. Un buco non ha niente da cliccare; il punto su cui è la tastiera è cerchiato, e annunciato al lettore di schermo |
ue_point_rclicked (string as_key, long al_index, double ad_value, long al_x, long al_y) | Un clic destro su una barra, un punto, una cella o una quotazione — o il tasto Menu (Maiusc+F10) sul punto su cui è la tastiera: la chiave della serie, la posizione da 1 e il valore, come li dà ue_point_clicked. È lì che si apre il proprio menu; al_x, al_y: dove aprire il menu, in pixel dello schermo — il puntatore, o da tastiera (tasto Menu, Maiusc+F10) il centro della forma del punto; un contextmenu vi si apre così com'è (uo_menu.of_show(al_x, al_y)) |
ue_rclicked ( ) | Un clic destro sul grafico dove nessun punto è disegnato — gli assi, il tracciato vuoto, la legenda. Un clic destro su un punto solleva invece ue_point_rclicked, mai entrambi |
ue_series_toggled (string as_key, boolean ab_visible) | L'utente ha nascosto o rimostrato una serie con un clic nella legenda. Ciò che il grafico mostra non è allora più ciò che l'applicazione ha inviato. Impostare ib_visible è un valore, come spuntare una casella: questo evento riporta il gesto dell'utente |
L'animazione è un ingresso, non un calcolo: la geometria finale è scritta subito, e si riproduce solo l'arrivo. Un grafico mai mostrato — nato fuori schermo, in una scheda che nessuno apre — mostra dunque le barre giuste, in silenzio.
Proprietà di elemento #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_label | string | "" | Il nome della serie, così come la legenda lo mostra |
is_type | string | bar | bar · line · area · scatter · stepline (costanti TYPE_*). Cambia il disegno di questa sola serie — è ciò che fa un grafico combinato. Viene preso solo un tipo della stessa famiglia: una serie di valori fra bar, line, area, scatter e stepline, una serie finanziaria fra ohlc e candle; un altro è ignorato e is_type rilegge il tipo conservato |
il_color | long | -1 | Colore della serie (RGB()). -1 finché non ne è impostato nessuno: sceglie la tavolozza, all'aggiunta, e la serie lo conserva: rimuovere un'altra serie non la ricolora mai. Un punto può prendere il suo (of_set_point_color). I colori di elemento ereditati (il_accent, il_back_color, il_text_color e le loro varianti al passaggio) non hanno alcun effetto su una serie: decide il_color |
ib_visible | boolean | true | false nasconde una serie senza rimuoverla — la legenda conserva la via del ritorno. Come una casella di controllo, è un valore impostato: ue_series_toggled riporta il clic dell'utente nella legenda |
ib_secondary | boolean | false | Traccia la serie sul secondo asse. È così che un numero e un importo vivono sullo stesso grafico |
ib_data_labels | boolean | false | Scrive il valore di ogni punto accanto a esso. Spento per difetto: su cinquanta punti le etichette coprono il disegno che spiegano |
is_label_format | string | "" | Ciò che dice ogni etichetta e ogni riga del pannello: #y# il valore, #x# la categoria (la x di una serie di punti, la colonna di una cella di calore), #v# la riga di una cella di calore, #label# il nome della serie, #open# #high# #low# #close# le quotazioni; il resto si scrive così com'è — "$#y#K". Vuoto = il valore da solo. Un'etichetta scritta dentro una barra impilata prende il nero o il bianco che la sua barra regge |
id_smoothness | double | 1 | Solo linee e aree: quanto la linea è arrotondata, 0 = segmenti dritti, 1 = pienamente curva, come la disegna LiveCharts. Una linea a gradini lo ignora — dice che il livello ha TENUTO fino alla categoria successiva, una curva direbbe che è derivato. Una curva può passare oltre i suoi punti; è tagliata alla cornice del tracciato e non dipinge mai sulle etichette degli assi |
ib_fill | boolean | true | Linee e aree: la velatura sotto il tratto, fino all'asse, nella tinta della serie. È la rimozione l'atto deliberato — per una linea posata sopra altro (colonne, bande d'asse colorate) che la velatura nasconderebbe |
il_fill_color | long | -1 | Il colore di quella velatura. -1 = quello della linea stessa |
is_marker | string | "circle" | Linee, linee a gradini e nuvole di punti: la FORMA del marcatore su ogni punto (costanti MARKER_*: none, circle, square, triangle, diamond). Non è decorazione — due linee che si incrociano, stampate in grigio, si distinguono per il loro marcatore e per nient'altro |
ii_thickness | integer | 2 | Linee e aree: lo spessore del tratto, in pixel |
il_point_count | long | 0 | Quanti punti porta questa serie — valori, coppie (x, y) o quotazioni (sola lettura). Un long: una serie in diretta può tenerne più di 32 767 |
il_cold_color | long | -1 | Solo mappe di calore: l'estremo FREDDO della scala, la lettura più leggera. -1 = la scala propria del componente, un solo blu, dal molto pallido al pieno |
il_mid_color | long | -1 | Il punto MEDIO. Tre punti e non due: interpolare da un estremo all'altro sbiadisce il centro della scala, dove si trovano la maggior parte delle letture. -1 = il blu medio del componente |
il_hot_color | long | -1 | L'estremo CALDO, la lettura più pesante. È quello che la legenda mostra. -1 = il blu pieno del componente |
il_up_color | long | -1 | Solo serie finanziarie: il colore di un punto che chiude sopra la sua apertura. -1 = il verde del componente |
il_down_color | long | -1 | E quello di un punto che chiude al di sotto. Due colori perché il verso è ciò che si legge su un tale grafico — uno solo lo nasconderebbe. -1 = il rosso del componente |
is_tooltip | string | "" | Il suo tooltip, scritto nel pannello dei valori, subito sotto la riga della serie — solo quando è la serie puntata (la sua barra, il suo punto o la sua linea sotto il mouse, o la serie scelta da tastiera con Su / Giù), mai per le altre serie della colonna, mai come seconda bolla. Una colonna sorvolata dove non è disegnata alcuna forma non punta alcuna serie. Con ib_value_tooltip a false, il pannello si apre comunque per esso, senza le cifre. Una serie di punti o una mappa di calore lo mostra nel pannello che la tastiera apre sul suo punto. Markup accettato |
is_super_tooltip_title | string | "" | Il titolo in grassetto del suo tooltip, scritto nel pannello sotto la sua riga |
is_super_tooltip_text | string | "" | Il testo del suo tooltip, nel pannello. Markup accettato |
is_super_tooltip_image | string | "" | Un'immagine in cima al suo tooltip, nel pannello (percorso del bundle, percorso assoluto o resources.dll:nome) |
Proprietà d'asse #
| Proprietà | Tipo | Predefinito | Ruolo |
|---|---|---|---|
is_title | string | "" | Titolo scritto lungo l'asse. Vuoto = nessun titolo, e nessuno spazio riservato. Il tooltip e i colori di elemento che un handle d'asse eredita (is_tooltip, is_super_tooltip_*, il_accent, il_back_color, il_text_color…) non hanno alcun effetto su un asse |
id_min | double | NULL | Limite inferiore imposto. Vince sui dati e non è arrotondato: chi scrive 0 vuole 0. NULL (SetNull) non impone nulla: l'asse segue di nuovo i suoi dati, e un limite libero si rilegge NULL (IsNull), mai 0. Libero, un asse dei valori include lo zero solo se una barra o un'area vi poggia: quotazioni e linee si leggono sul loro intervallo |
id_max | double | NULL | Limite superiore imposto, stessa regola. Ciò che lo supera è tagliato al bordo del tracciato |
id_step | double | 0 | Distanza fra due linee di griglia, in valori. 0 = un passo tondo letto dall'intervallo |
ii_label_rotation | integer | 0 | Rotazione delle etichette di questo asse, in gradi (da -90 a 90) — nomi di categoria o graduazioni dei valori. Dodici nomi di mesi stanno sotto un grafico solo inclinati; quando ancora non ci stanno, il grafico ne scrive uno su N, sempre il primo e l'ultimo |
ib_separator | boolean | true | Le sue linee di griglia. Un asse di categorie ne ha raramente bisogno, uno di valori quasi sempre |
ii_section_count | integer | 0 | Quante fasce e soglie porta questo asse (sola lettura) |
ib_logarithmic | boolean | false | Solo assi dei valori: una scala logaritmica, graduata per decadi (1, 10, 100…), ogni decade della stessa altezza — per cifre che coprono più ordini di grandezza. Lo zero e i valori negativi non vi trovano posto e non sono disegnati |
is_format | string | "" | Il formato di questo asse — le sue graduazioni, e le etichette e il pannello delle serie tracciate su di esso — sopra l'is_format del grafico: un importo da un lato, un numero di ordini dall'altro. Stessa sintassi (#,##0, 0.0 "u"…). Vuoto = il formato del grafico |
Esempi #
Regolare l'animazione secondo lo schermo #
// 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
Aprire le righe dietro un punto #
// 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)
Un cruscotto che vive #
// 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)
Un grafico in diretta che scorre #
// 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)
Una misura mancante, e il grafico come immagine #
// 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")
Una fascia e un obiettivo sull'asse dei valori #
// 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)"
Un grafico alimentato da un 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()
Il colore di un punto, un menu su un altro #
// 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
Buone pratiche #
- Ponete le categorie prima delle serie. Il loro numero dice cosa una serie deve contenere; il contrario non può funzionare.
- Un secondo asse si giustifica, non si subisce. Due scale su uno stesso disegno ingannano l'occhio: tiratelo fuori solo quando le unità sono davvero diverse.
- Spegnete l'animazione su un cruscotto che si aggiorna. Un arrivo che ricomincia ogni cinque secondi non finisce mai, e stanca invece di aiutare.
- Le barre partono da zero, e il componente vi si attiene: lo zero entra nell'asse appena una barra o un'area vi poggia. Un grafico a barre troncato esagera ogni scarto. Linee, nuvole e quotazioni si leggono sul loro intervallo.
- Il grafico conserva il senso matematico in un'applicazione da destra a sinistra: categorie da sinistra a destra, asse dei valori a sinistra. Solo la legenda
START/ENDsegue il senso di lettura. - Impilate per leggere un totale, affiancate per confrontare. Non sono due stili, sono due domande diverse.
- Aggiunga ogni serie in un grafico in diretta:
of_append_categories, poiof_append_valuesper ciascuna, con lo stesso massimo — una serie dimenticata scivola sotto la categoria accanto. - Un buco non è uno zero. Un valore NULL non è né disegnato, né etichettato, né cliccabile; un peso NULL lascia vuota la cella di una mappa di calore.
ue_point_clickeddà il rango: servitevene per aprire l'elenco esatto dietro quel punto, non la maschera di ricerca.
Ereditato dalla base comune #
Questi membri esistono su tutti i componenti visivi — non sono propri di questo. Sono descritti una sola volta, nei capitoli trasversali; questa tabella dice solo dove leggerli.
| Membri | Ruolo | Descritto in |
|---|---|---|
of_count · of_keys_at · of_has | Percorrere ciò che il componente contiene | 3.2 Gli item |
of_reset | Riportare il componente a zero | 3.6 Riportare un componente a zero: of_reset() |
of_register_shortcut · of_clear_shortcuts | Scorciatoie da tastiera del componente | 3.5 Le scorciatoie da tastiera |
of_is_created · of_is_ready · of_get_last_error | Se è nato, se è pronto, cosa è fallito | 3.7 Diagnostica |
of_save_as_png · of_save_as_jpg | Esportare il rendering in immagine | 3.8 Esportare il rendering come immagine |
of_set_redraw | Raggruppare le modifiche in un solo ridisegno | 3.10 Buone pratiche |
of_preload_icons | Icone mostrate senza ritardo | Visualizzazione istantanea: of_icon |
of_set_translation | Tradurre una dicitura del componente | 5.2 Adattare un'etichetta: of_set_translation |
of_focus_webview | Dare il focus al componente | 6.4 Tastiera e focus |
of_print · of_print_to_pdf | Stampare, o scrivere un PDF | 6.9 Stampare |
of_set_property · of_get_property · of_component_name | Pilotare una proprietà per nome | 3.1 Il motore delle proprietà |
is_accessible_name · is_accessible_description | Il nome e la descrizione che dice un lettore di schermo | 3.4 Proprietà ed event opzionali |
Due aiuti non sono ereditati: of_icon e of_escape_markup vivono su n_pbt_utils. Ne dichiari uno — n_pbt_utils lnv_utils, niente da creare — e li chiami su di esso.