PBToolboxAI v5 ← Site

chartcartesian — u_pbt_chartcartesian #

← Referencia de componentes · Índice de la guía

Gráfico cartesiano: columnas, barras, líneas, áreas y nubes de puntos, sobre un eje de categorías y uno o dos ejes de valores. El tipo se fija por serie.

▶ Verlo en vivo — Aplicación de demostración, mosaico Cartesian chart : la vista previa, el código que lo produce y esta página, lado a lado.


En resumen #

Userobjectu_pbt_chartcartesian
Clase de elementosn_pbt_chartcartesian_series (of_item(key)) · n_pbt_chartcartesian_axis (of_axis(axis))
Sirve paraComparar valores a lo largo de un eje — meses, productos, regiones
PrincipioUsted pone las categorías y luego las series; las escalas, la rejilla y la animación son cosa nuestra

Inicio rápido #

// 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)

El tipo pertenece a la SERIE, no al componente #

Es la decisión de la que se sigue todo lo demás. Un componente por tipo — uno para barras, otro para líneas — nunca puede producir un combinado: barras con una línea de objetivo encima, sobre un segundo eje. Y esa es la forma más pedida en un cuadro de mando.

Aquí hay un solo componente, y cada serie lleva su is_type (TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER, TYPE_STEPLINE). Cambiar el tipo de una serie no toca las demás.

ib_secondary coloca una serie en el segundo eje de valores. Es lo que permite que un número de pedidos y una facturación convivan: sin él, uno de los dos es una línea plana al ras del eje.

of_set_categories va antes que las series: su número fija cuántos valores debe llevar cada serie.

// 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

Propiedades #

PropiedadTipoPredeterminadoFunción
is_titlestring""Título del gráfico, mostrado encima
ib_show_legendbooleantrueMuestra la leyenda. Hacer clic en una entrada oculta su serie — la forma más barata de comparar dos series de cinco
is_legend_locationstringbottomDónde va la leyenda (constantes LEGEND_*): encima o debajo del trazado, o al lado — START/END la colocan en columna a un lado, y el trazado le cede el sitio. START/END son lógicas: siguen el sentido de lectura. Una posición desconocida vale abajo, y se relee así
ib_show_gridbooleantrueLas líneas de fondo, en cada valor redondo. Sin ellas solo la forma sigue siendo legible, nunca un valor
ib_value_tooltipbooleantrueEl panel de valores: cuando el ratón pasa sobre una categoría, todas las series y su valor ahí, de una vez, y una retícula marca la columna. No es is_tooltip (heredado), que es el tooltip del componente entero — éste sigue al puntero y dice de qué está hecho el gráfico. Cada serie escribe su línea con su propio is_label_format; un valor ausente no tiene línea. La información de una serie (su is_tooltip) se escribe en este panel, bajo la línea de la serie señalada, incluso en false
is_orientationstringverticalColumnas o barras (constantes ORIENTATION_*). Gira todo el sistema de referencia, líneas y áreas incluidas
ib_stackedbooleanfalseApila las series de barras en vez de ponerlas una al lado de otra; las series de áreas se apilan entre sí — nunca barras con áreas. Una línea nunca se apila: dice un nivel. Las barras del segundo eje forman su propia pila, junto a la del eje principal
is_stack_modestringvalueSuma o parte (constantes STACK_*). En percentage cada pila se lleva a 100: el eje lee entonces partes, no totales — hasta -100 cuando hay partes negativas. No significa nada fuera del apilado
ib_enabledbooleantrueAtenuado: el componente sigue mostrando lo que muestra — un gráfico sin datos no es lo mismo que un gráfico que la aplicación ha apagado — pero deja de responder: ni clic, ni tecla, ni entrada de leyenda, y sale del orden de tabulación. true por defecto
ib_animatedbooleantrueEl gráfico llega animado: las formas suben desde el eje — todo el gráfico cuando pasa de vacío a dibujado y cuando se añade una serie. Los nuevos valores se deslizan a su sitio, y una forma que un gráfico en directo añade (of_append_values) sube sola: un cuadro de mando que se refresca puede conservar la animación. Un puesto configurado para reducir el movimiento no anima, salvo que la aplicación insista (PBT_SetAnimationPolicy, sección 4.8)
ii_anim_durationinteger450Duración de esa llegada, en milisegundos (0 a 5000)
is_anim_easingstringease-outCurva de la aparición (constantes EASING_*): linear, ease-out, back-out que se pasa y vuelve, bounce-out que rebota, elastic-out que chasquea. Es la que da su carácter a la animación
ii_anim_delayinteger0Desfase entre dos series a la llegada, en milisegundos (0 a 1000). Entran entonces una tras otra en vez de surgir juntas, lo que da al gráfico su sentido de lectura. 0 = todas a la vez
is_formatstring""El formato de todos los números que escribe el gráfico — ejes de valores, etiquetas y panel de valores — en la sintaxis de un formato de DataWindow: #,##0.00, $#,##0, #,##0 "unidades", secciones positivo;negativo;cero. Los separadores son los del idioma de visualización. Un eje puede llevar el suyo (of_axis(AXIS_VALUE2).is_format), que prevalece sobre este. Vacío (o un formato que no es numérico) = el número tal cual, a la milésima
is_theme_stylestring""Estilo visual del componente (constantes THEME_STYLE_*); vacío = el de la aplicación, seguido en cada cambio
is_theme_modestring""Variante clara u oscura (constantes THEME_MODE_*); vacío = la de la aplicación, seguida en cada cambio
il_theme_accentlong-1Color de acento de este componente (-1 = acento del tema)
is_tooltipstring""Información sobre herramientas simple al pasar por encima del componente
is_super_tooltip_titlestring""Título de la información enriquecida (tiene prioridad sobre is_tooltip)
is_super_tooltip_textstring""Texto de la información enriquecida (se acepta marcado enriquecido)
is_super_tooltip_imagestring""Imagen de la información enriquecida

Métodos #

MétodoFunción
of_set_categories ( string as_labels[] )Las etiquetas del eje de categorías — texto: una etiqueta de marcado que contengan se quita, y el eje, el panel y #x# dicen lo mismo. Llámelo antes que las series. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_set_value_labels ( string as_labels[] )Etiquetas en el eje de valores. Vacío — el caso normal — ese eje lleva números. Relleno, lleva bandas como el eje de categorías: el marco de dos categorías en el que se dibuja un mapa de calor. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_get_value_labels ( ref string as_labels[] )Rellena as_labels[] con lo que el eje de valores lleva ahora y devuelve el número. Cero = lleva números; una etiqueta que contiene `` se relee entera
of_get_categories ( ref string as_labels[] )Rellena as_labels[] con las categorías que el gráfico lleva ahora — después de que of_append_categories quitara las más antiguas, después de que of_from_datastore las leyera — y devuelve su número
of_get_last_error ( )Por qué se rechazó la última llamada (un rol de of_map que las filas no tienen, un límite NULL, una posición fuera de una serie…), o cuántas filas descartó el último of_from_datastore y por qué; si no, el último error de la DLL, como para todo componente
of_add_heat_series ( string as_key, string as_label, long al_x[], long al_y[], double ad_weight[] )Un mapa de calor: una celda por par (categoría, etiqueta de valor), coloreada por su peso. al_x es el rango de la categoría y al_y el de la etiqueta, ambos desde 1 — los rangos de un arreglo PowerScript, que un doble bucle escribe sin cálculo. Ponga antes las dos listas. Un peso NULL es una celda vacía: allí no se dibuja, etiqueta ni pulsa nada. Devuelve 0 una vez añadida, -5 si la clave está vacía, contiene / o `, o ya está tomada, -2` si el componente no está creado
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: el rango de mínimo a máximo, una marca a la izquierda para la apertura y otra a la derecha para el cierre. Cuatro números por punto, y el eje se lee sobre el máximo y el mínimo — los otros dos están dentro por construcción. Los cuatro arreglos se truncan al más corto. Devuelve 0 una vez añadida, -5 si la clave está vacía, contiene / o `, o ya está tomada, -2` si el componente no está creado
of_add_candle_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] )Los mismos cuatro números, dibujados como velas: una mecha de mínimo a máximo y un cuerpo relleno entre apertura y cierre. Un doji — apertura igual al cierre — conserva un píxel de cuerpo, para seguir siendo una línea que el ojo encuentra. Devuelve 0 una vez añadida, -5 si la clave está vacía, contiene / o `, o ya está tomada, -2` si el componente no está creado
of_set_series_ohlc ( string as_key, double ad_open[], double ad_high[], double ad_low[], double ad_close[] )Nuevas cotizaciones para una serie financiera ya trazada. Lo que of_set_series_values es a una serie de valores. Devuelve 0 una vez aplicado, -5 si ninguna serie lleva esta clave o si no es financiera, -2 si el componente no está creado
of_get_series_ohlc ( string as_key, ref double ad_open[], ref double ad_high[], ref double ad_low[], ref double ad_close[] )Rellena los cuatro arreglos con lo que la serie lleva ahora y devuelve el número de puntos. Una serie no financiera devuelve 0
of_add_series ( string as_key, string as_label, string as_type, double ad_values[] { , long al_color } )Añade una serie con su tipo — TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER o TYPE_STEPLINE; la sobrecarga toma también su color (RGB()), si no la paleta elige. Un valor NULL (SetNull) es un hueco: ahí no se dibuja, ni se etiqueta ni se hace clic en nada, y una línea se corta. Una clave ya tomada se rechaza, nunca se reemplaza: of_set_series_values y el handle of_item cambian una serie que existe. Devuelve 0 una vez añadida, -5 si el tipo no es uno de esos cinco (un mapa de calor y las series financieras tienen su método), o si la clave está vacía, contiene / o `, o ya está tomada, -2` si el componente no está creado
of_set_series_values ( string as_key, double ad_values[] )Nuevos valores para una serie ya trazada, lo demás intacto. Es la llamada de un panel vivo: la serie conserva su identidad, así que las formas se deslizan en vez de saltar. Un valor NULL es un hueco. Devuelve 0 una vez aplicado, -5 si ninguna serie lleva esta clave o si lleva puntos o cotizaciones (of_set_series_points, of_set_series_ohlc los reemplazan), -2 si el componente no está creado
of_set_point_color ( string as_key, long al_position, long al_color )El color de un punto — el mes que superó su límite, en rojo. al_position cuenta desde 1; -1 (o NULL) devuelve al punto el color de su serie. Barras, marcadores de línea y puntos de nube lo toman, y se desliza con su punto en un gráfico en directo. Devuelve 0 una vez aplicado, -5 si ninguna serie lleva esta clave, si la posición está fuera de la serie, o para un mapa de calor o una serie financiera (sus colores son su escala y su sentido), -2 si el componente no está creado
of_get_point_color ( string as_key, long al_position )Devuelve el color (un long RGB()) que of_set_point_color — o una columna ROLE_COLOR — dio al punto al_position, contado desde 1, o -1 cuando no tiene (toma el color de su serie), y para una clave o una posición desconocida
of_append_values ( string as_key, double ad_values[], long al_max_points )Un gráfico en directo: añade nuevos valores al final de una serie y quita los más antiguos en cuanto lleva más de al_max_points (0 = sin límite). Solo viajan los valores nuevos — la serie no se reenvía en cada tic. Combínelo con of_append_categories. Las nuevas formas suben solas, las demás se deslizan. Añada cada serie, con el mismo máximo que of_append_categories: una serie olvidada se desfasa de sus categorías. Devuelve 0 una vez aplicado, -5 si ninguna serie lleva esta clave o si lleva puntos o cotizaciones, -2 si el componente no está creado
of_append_categories ( string as_labels[], long al_max_count )Nuevas categorías al final del eje, las más antiguas quitadas más allá de al_max_count (0 = sin límite): las etiquetas de un gráfico en directo se deslizan con sus valores. Añada cada serie con of_append_values y el mismo máximo. Devuelve 0 una vez aplicado, -2 si el componente no está creado
of_add_point_series ( string as_key, string as_label, double ad_x[], double ad_y[] { , double ad_weight[] } )Una serie situada por valor en los dos ejes: x dice dónde a lo largo del eje de categorías, y a qué altura. Ese eje deja entonces de ser un eje de categorías — pasa a ser un segundo eje de valores, con sus propias graduaciones. Una sobrecarga toma un peso por punto, que dimensiona la burbuja. Un peso NULL conserva el tamaño predeterminado, fuera de la escala de las demás. No mezcle estas series con series de valores en un gráfico de categorías: las etiquetas de las categorías dejan paso a las graduaciones. Devuelve 0 una vez añadida, -5 si la clave está vacía, contiene / o `, o ya está tomada, -2` si el componente no está creado
of_set_series_points ( string as_key, double ad_x[], double ad_y[], double ad_weight[] )Nuevos puntos para una serie que ya lleva algunos. Lo que of_set_series_values es a una serie de valores. Devuelve 0 una vez aplicado, -5 si ninguna serie lleva esta clave o si lleva valores o cotizaciones, -2 si el componente no está creado
of_get_series_points ( string as_key, ref double ad_x[], ref double ad_y[], ref double ad_weight[] )Rellena los tres arreglos con lo que la serie lleva ahora y devuelve el número de puntos. Una serie de valores no devuelve nada en ad_x: no tiene abscisa propia
of_get_series_values ( string as_key, ref double ad_values[] )Rellena ad_values[] con lo que la serie lleva ahora y devuelve el número. Lectura viva : pregunta al gráfico, no al último envío
of_remove_series ( string as_key )Quita una serie; las demás conservan su color — tomado al añadirlas — y su visibilidad; su tooltip y sus colores de elemento se van con ella. Su handle (of_item) se destruye con ella: un of_item posterior sobre la misma clave crea uno nuevo. Devuelve 0 una vez quitada, -5 si ninguna serie lleva esta clave, -2 si el componente no está creado
of_clear ( )Vacía el gráfico — series y categorías; los handles de serie se van con ellas. Los ejes conservan sus ajustes y sus secciones. Devuelve 0 una vez vaciado, -2 si el componente no está creado
of_from_datastore ( datastore ads )Alimenta el gráfico desde un DataStore (un DataWindow, un DataWindowChild: sobrecargas), como el gráfico de un DataWindow: una columna de categorías, una columna de valores y, si la hay, una columna de series — una serie por cada valor encontrado, una serie con el nombre de la columna de valores sin ella. Las filas que comparten una categoría y una serie se suman; las categorías llegan en el orden de las filas (ordene el DataStore); una categoría sin fila es un hueco. Una columna de color colorea su punto. Una columna desempeña un papel cuando lleva su nombre (category, series, value, color) o cuando of_map lo dice; números y fechas del puesto se leen bien. Dado de nuevo, el gráfico cambia en su sitio: una serie conserva su tipo, su color y su eje, una serie añadida a mano nunca se toca; una nueva serie es una barra. Devuelve 0 una vez cargado (las filas cuya serie no puede ser una clave se saltan: of_get_last_error dice cuántas), -5 si el DataStore no es válido o ninguna columna desempeña ROLE_CATEGORY o ROLE_VALUE (of_get_last_error dice cuál), -2 si el componente no está creado
of_map ( string as_role, string as_column )Da un papel a una columna del DataStore (ROLE_CATEGORY, ROLE_SERIES, ROLE_VALUE, ROLE_COLOR) cuando su nombre no lo dice. Antes de of_from_datastore, o después: las filas se vuelven a leer. Una columna vacía devuelve el papel a la columna que lleva su nombre. Devuelve 0 una vez puesto, -5 si el papel no es una constante ROLE_ o la columna no es una del último DataStore, -2 si el componente no está creado
of_reload ( )Vuelve a leer las filas del DataStore (o del DataWindow) dado a of_from_datastore — tras un Retrieve, una edición, un filtro — y cambia el gráfico en su sitio: las formas se deslizan hacia sus nuevos valores. Devuelve 0 una vez leído, -5 si no se dio ningún DataStore o ya no es válido, -2 si el componente no está creado
of_item ( string as_key )Devuelve el asa de una serie, para modificarla después
of_axis ( string as_axis )Devuelve el asa de un eje (AXIS_CATEGORY, AXIS_VALUE, AXIS_VALUE2), para ajustarlo después. Cualquier otro papel no devuelve ninguna asa (IsValid() es falso)
of_add_axis_section ( string as_axis, string as_key, double ad_from, double ad_to, long al_color )Una banda a través del trazado, detrás de los datos: « por debajo de 200 es malo ». Dibujada bajo las formas, nunca compite con ellas. En el eje de categorías, ad_from y ad_to son posiciones contadas a partir de 1 (de 2 a 3 cubre la segunda y la tercera categoría). Un color -1 (o NULL) es una veladura pálida del acento del tema. Devuelve 0 una vez añadida, -5 si el eje no es uno de los AXIS_*, si un límite es NULL o si la clave está vacía, contiene / o `, o ya está tomada en ese eje, -2` si el componente no está creado
of_add_axis_threshold ( string as_axis, string as_key, double ad_at, long al_color, integer ai_thickness )Una línea a través del trazado en un valor — un objetivo, un límite. El mismo registro que las bandas, pero dibujada para verse. Un color -1 (o NULL) la dibuja en el acento del tema. Devuelve 0 una vez añadida, -5 si el eje no es uno de los AXIS_*, si un límite es NULL o si la clave está vacía, contiene / o `, o ya está tomada en ese eje, -2` si el componente no está creado
of_clear_axis_sections ( string as_axis )Retira todas las bandas y todos los umbrales de un eje. Devuelve 0 una vez vaciado, -5 si el eje no es uno de los AXIS_*, -2 si el componente no está creado
of_remove_axis_section ( string as_axis, string as_key )Quita una banda o un umbral de un eje: los demás se quedan. Devuelve 0 una vez quitado, -5 si el eje no es uno de los AXIS_* o no lleva ninguna sección con esta clave, -2 si el componente no está creado
of_reset ( )Vacía el gráfico — handles de serie y de eje incluidos — y devuelve todas las propiedades a su valor de origen. Devuelve 0 una vez hecho, -2 si el componente no está creado

Sin clave (modo demo), el gráfico solo dibuja sus 3 primeras series, leyenda incluida. Las demás se quedan en el modelo — of_count, of_get_series_values y sus handles las ven — y la clave puesta las muestra sin que tenga que volver a enviar nada.


Eventos #

EventoSe dispara cuando
ue_point_clicked (string as_key, long al_index, double ad_value)Se ha hecho clic en una barra, un punto, una celda o una cotización — o se ha confirmado con Intro: la clave de la serie, la posición del punto en la serie, a partir de 1, y su valor — el del punto sea cual sea la forma de la serie: la y de una nube, el peso de una celda de calor, el cierre de una cotización. Con el teclado, Izquierda/Derecha recorren las categorías y Arriba/Abajo eligen la serie que el panel subraya; una serie de puntos o un mapa de calor elegido se recorre punto por punto. Un hueco no tiene nada que pulsar; el punto en el que está el teclado se rodea, y se anuncia al lector de pantalla
ue_point_rclicked (string as_key, long al_index, double ad_value, long al_x, long al_y)Un clic derecho en una barra, un punto, una celda o una cotización — o la tecla Menú (Mayús+F10) en el punto en el que está el teclado: la clave de la serie, la posición desde 1 y el valor, como los da ue_point_clicked. Ahí se abre su menú; al_x, al_y: dónde abrir el menú, en píxeles de pantalla — el puntero, o con el teclado (tecla Menú, Mayús+F10) el centro de la forma del punto; un contextmenu se abre allí tal cual (uo_menu.of_show(al_x, al_y))
ue_rclicked ( )Un clic derecho en el gráfico donde no se dibuja ningún punto — los ejes, el trazado vacío, la leyenda. Un clic derecho en un punto lanza ue_point_rclicked en su lugar, nunca los dos
ue_series_toggled (string as_key, boolean ab_visible)El usuario ha ocultado o vuelto a mostrar una serie con un clic en la leyenda. Lo que el gráfico muestra ya no es entonces lo que la aplicación envió. Poner ib_visible es un valor, como marcar una casilla: este evento informa del gesto del usuario

La animación es una entrada, no un cálculo: la geometría final se escribe de inmediato y solo se reproduce la llegada. Un gráfico nunca mostrado — nacido fuera de pantalla, en una pestaña que nadie abre — enseña por tanto las barras correctas, en silencio.


Propiedades de elemento #

PropiedadTipoPredeterminadoFunción
is_labelstring""El nombre de la serie, tal como lo muestra la leyenda
is_typestringbarbar · line · area · scatter · stepline (constantes TYPE_*). Cambia el dibujo de esta serie sola — es lo que hace un gráfico combinado. Solo se acepta un tipo de la misma familia: una serie de valores entre bar, line, area, scatter y stepline, una serie financiera entre ohlc y candle; cualquier otro se ignora e is_type relee el tipo conservado
il_colorlong-1Color de la serie (RGB()). -1 mientras no se pone ninguno: la paleta elige, al añadirla, y la serie lo conserva: quitar otra serie nunca la vuelve a colorear. Un punto puede tomar el suyo (of_set_point_color). Los colores de elemento heredados (il_accent, il_back_color, il_text_color y sus variantes al pasar el ratón) no tienen efecto sobre una serie: decide il_color
ib_visiblebooleantruefalse oculta una serie sin quitarla — la leyenda guarda el camino de vuelta. Como una casilla de verificación, es un valor que se pone: ue_series_toggled informa del clic del usuario en la leyenda
ib_secondarybooleanfalseTraza la serie en el segundo eje. Así conviven un número y un importe en el mismo gráfico
ib_data_labelsbooleanfalseEscribe el valor de cada punto a su lado. Apagado por defecto: con cincuenta puntos, las etiquetas tapan el dibujo que explican
is_label_formatstring""Lo que dice cada etiqueta y cada línea del panel: #y# el valor, #x# la categoría (la x de una serie de puntos, la columna de una celda de calor), #v# la fila de una celda de calor, #label# el nombre de la serie, #open# #high# #low# #close# las cotizaciones; el resto se escribe tal cual — "$#y#K". Vacío = el valor solo. Una etiqueta escrita dentro de una barra apilada toma el negro o el blanco que su barra soporta
id_smoothnessdouble1Solo líneas y áreas: cuán redondeada se dibuja la línea, 0 = segmentos rectos, 1 = plenamente curva, como la dibuja LiveCharts. Una línea escalonada lo ignora — dice que el nivel se MANTUVO hasta la categoría siguiente, una curva diría que derivó. Una curva puede pasar más allá de sus puntos; se recorta al marco del trazado y nunca pinta sobre las etiquetas de los ejes
ib_fillbooleantrueLíneas y áreas: el lavado bajo el trazo, hasta el eje, en el tono de la serie. Es la retirada la que es el acto deliberado — para una línea puesta sobre otra cosa (columnas, bandas de eje coloreadas) que el lavado ocultaría
il_fill_colorlong-1El color de ese lavado. -1 = el de la línea misma
is_markerstring"circle"Líneas, escalones y nubes de puntos: la FORMA del marcador en cada punto (constantes MARKER_*: none, circle, square, triangle, diamond). No es decoración — dos líneas que se cruzan, impresas en gris, se distinguen por su marcador y por nada más
ii_thicknessinteger2Líneas y áreas: el grosor del trazo, en píxeles
il_point_countlong0Cuántos puntos lleva esta serie — valores, pares (x, y) o cotizaciones (sólo lectura). Un long: una serie en directo puede guardar más de 32 767
il_cold_colorlong-1Solo mapas de calor: el extremo FRÍO de la escala, la lectura más ligera. -1 = la escala propia del componente, un solo azul, del muy pálido al intenso
il_mid_colorlong-1El punto MEDIO. Tres puntos y no dos: interpolar de un extremo a otro desvaída el centro de la escala, donde se sitúan la mayoría de las lecturas. -1 = el azul medio del componente
il_hot_colorlong-1El extremo CALIENTE, la lectura más pesada. Es el que muestra la leyenda. -1 = el azul intenso del componente
il_up_colorlong-1Solo series financieras: el color de un punto que cierra por encima de su apertura. -1 = el verde del componente
il_down_colorlong-1Y el de un punto que cierra por debajo. Dos colores porque el sentido es lo que se lee en un gráfico así — uno solo lo ocultaría. -1 = el rojo del componente
is_tooltipstring""Su información, escrita en el panel de valores, justo bajo la línea de la serie — solo cuando es la serie señalada (su barra, su punto o su línea bajo el ratón, o la serie elegida con el teclado por Arriba / Abajo), nunca para las otras series de la columna, nunca como segunda burbuja. Una columna recorrida donde no hay ninguna forma dibujada no señala ninguna serie. Con ib_value_tooltip en false, el panel se abre igualmente para ella, sin las cifras. Una serie de puntos o un mapa de calor la muestra en el panel que el teclado abre sobre su punto. Se admite marcado
is_super_tooltip_titlestring""El título en negrita de su información, escrito en el panel bajo su línea
is_super_tooltip_textstring""El texto de su información, en el panel. Se admite marcado
is_super_tooltip_imagestring""Una imagen en la cabecera de su información, en el panel (ruta del bundle, ruta absoluta o resources.dll:nombre)

Propiedades de eje #

PropiedadTipoPredeterminadoFunción
is_titlestring""Título escrito a lo largo del eje. Vacío = sin título, y sin sitio reservado para uno. La información y los colores de elemento que hereda un manejador de eje (is_tooltip, is_super_tooltip_*, il_accent, il_back_color, il_text_color…) no tienen efecto sobre un eje
id_mindoubleNULLLímite inferior impuesto. Gana a los datos y no se redondea: quien escribe 0 quiere 0. NULL (SetNull) no impone nada: el eje vuelve a seguir sus datos, y un límite libre se relee NULL (IsNull), nunca 0. Libre, un eje de valores solo incluye el cero si una barra o un área se apoya en él: cotizaciones y líneas se leen en su propio rango
id_maxdoubleNULLLímite superior impuesto, misma regla. Lo que lo supera se corta en el borde del trazado
id_stepdouble0Distancia entre dos líneas de rejilla, en valores. 0 = un paso redondo leído del rango
ii_label_rotationinteger0Rotación de las etiquetas de este eje, en grados (-90 a 90) — nombres de categoría o graduaciones de valores. Doce nombres de meses solo caben bajo un gráfico inclinados; cuando aún no caben, el gráfico escribe uno de cada N, siempre el primero y el último
ib_separatorbooleantrueSus líneas de rejilla. Un eje de categorías rara vez las necesita, uno de valores casi siempre
ii_section_countinteger0Cuántas bandas y umbrales lleva este eje (sólo lectura)
ib_logarithmicbooleanfalseSolo ejes de valores: una escala logarítmica, graduada por décadas (1, 10, 100…), cada década de la misma altura — para cifras que abarcan varios órdenes de magnitud. El cero y los valores negativos no tienen sitio en ella y no se dibujan
is_formatstring""El formato de este eje — sus graduaciones, y las etiquetas y el panel de las series trazadas sobre él — por encima del is_format del gráfico: un importe de un lado, un número de pedidos del otro. Misma sintaxis (#,##0, 0.0 "u"…). Vacío = el formato del gráfico

Ejemplos #

Ajustar la animación según la pantalla #

// 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

Abrir las filas detrás de 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 cuadro de mando vivo #

// 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 gráfico en directo que se desliza #

// 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 medida que falta, y el gráfico como imagen #

// 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 banda y un objetivo en el eje de valores #

// 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 gráfico alimentado por 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()

El color de un punto, un menú en otro #

// 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

Buenas prácticas #

Heredado de la base común #

Estos miembros existen en todos los componentes visuales — no son propios de este. Se detallan una sola vez, en los capítulos transversales; esta tabla solo dice dónde leerlos.

MiembrosFunciónDetallado en
of_count · of_keys_at · of_hasRecorrer lo que el componente contiene3.2 Los items
of_resetPoner el componente a cero3.6 Poner un componente a cero: of_reset()
of_register_shortcut · of_clear_shortcutsAtajos de teclado del componente3.5 Los atajos de teclado
of_is_created · of_is_ready · of_get_last_errorSi ha nacido, si está listo, qué ha fallado3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar el render como imagen3.8 Exportar la representación como imagen
of_set_redrawAgrupar los cambios en un solo repintado3.10 Buenas prácticas
of_preload_iconsIconos mostrados sin retardoVisualización instantánea: of_icon
of_set_translationTraducir una etiqueta del componente5.2 Adaptar una etiqueta: of_set_translation
of_focus_webviewDar el foco al componente6.4 Teclado y foco
of_print · of_print_to_pdfImprimir, o escribir un PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar una propiedad por su nombre3.1 El motor de propiedades
is_accessible_name · is_accessible_descriptionEl nombre y la descripción que dice un lector de pantalla3.4 Propiedades y eventos opcionales

Dos ayudas no se heredan: of_icon y of_escape_markup viven en n_pbt_utils. Declare uno — n_pbt_utils lnv_utils, nada que crear — y llámelas sobre él.

← Referencia de componentes · Índice de la guía