PBToolboxAI v5 ← Site

chartcartesian — u_pbt_chartcartesian #

← Referência dos componentes · Índice do guia

Gráfico cartesiano: colunas, barras, linhas, áreas e nuvens de pontos, num eixo de categorias e num ou dois eixos de valores. O tipo define-se por série.

▶ Ver ao vivo — Aplicação de demonstração, mosaico Cartesian chart : a pré-visualização, o código que o produz e esta página, lado a lado.


Em resumo #

Userobjectu_pbt_chartcartesian
Classe de itensn_pbt_chartcartesian_series (of_item(key)) · n_pbt_chartcartesian_axis (of_axis(axis))
Serve paraComparar valores ao longo de um eixo — meses, produtos, regiões
PrincípioVocê põe as categorias e depois as séries; as escalas, a grelha e a animação são connosco

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

O tipo pertence à SÉRIE, não ao componente #

É a decisão de que decorre tudo o resto. Um componente por tipo — um para barras, outro para linhas — nunca pode produzir um combinado: barras encimadas por uma linha de objectivo, num segundo eixo. E é justamente a forma mais pedida num painel.

Aqui há um só componente, e cada série leva o seu is_type (TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER, TYPE_STEPLINE). Mudar o tipo de uma série não toca nas outras.

ib_secondary coloca uma série no segundo eixo de valores. É o que permite a um número de encomendas e a uma facturação conviverem: sem ele, uma das duas é uma linha plana rente ao eixo.

of_set_categories vem antes das séries: o seu número fixa quantos valores cada série deve levar.

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

Propriedades #

PropriedadeTipoPredefiniçãoPapel
is_titlestring""Título do gráfico, mostrado por cima
ib_show_legendbooleantrueMostra a legenda. Clicar numa entrada esconde a sua série — a forma mais barata de comparar duas séries em cinco
is_legend_locationstringbottomOnde fica a legenda (constantes LEGEND_*): por cima ou por baixo do traçado, ou ao lado — START/END põem-na em coluna de um lado, e o traçado cede-lhe o espaço. START/END são lógicas: seguem o sentido de leitura. Uma posição desconhecida vale o fundo, e relê-se assim
ib_show_gridbooleantrueAs linhas de fundo, em cada valor redondo. Sem elas só a forma continua legível, nunca um valor
ib_value_tooltipbooleantrueO painel de valores: quando o rato passa sobre uma categoria, todas as séries e o seu valor aí, de uma vez, e uma retícula marca a coluna. Não é is_tooltip (herdado), que é a dica do componente inteiro — este segue o ponteiro e diz de que é feito o gráfico. Cada série escreve a sua linha com o seu próprio is_label_format; um valor ausente não tem linha. A dica de uma série (o seu is_tooltip) é escrita neste painel, sob a linha da série apontada, mesmo a false
is_orientationstringverticalColunas ou barras (constantes ORIENTATION_*). Roda todo o referencial, linhas e áreas incluídas
ib_stackedbooleanfalseEmpilha as séries de barras em vez de as pôr lado a lado; as séries de áreas empilham-se entre si — nunca barras com áreas. Uma linha nunca se empilha: diz um nível. As barras do segundo eixo formam a sua própria pilha, ao lado da do eixo principal
is_stack_modestringvalueSoma ou quota (constantes STACK_*). Em percentage cada pilha é levada a 100: o eixo lê então quotas, não totais — até -100 quando há quotas negativas. Não significa nada fora do empilhamento
ib_enabledbooleantrueEsbatido: o componente continua a mostrar o que mostra — um gráfico sem dados não é o mesmo que um gráfico que a aplicação desligou — mas deixa de responder: nem clique, nem tecla, nem entrada de legenda, e sai da ordem de tabulação. true por omissão
ib_animatedbooleantrueO gráfico chega animado: as formas sobem do eixo — o gráfico inteiro quando passa de vazio a desenhado e quando se acrescenta uma série. Os novos valores deslizam para o seu lugar, e uma forma que um gráfico em direto acrescenta (of_append_values) sobe sozinha: um painel que se actualiza pode manter a animação. Um posto configurado para reduzir o movimento não anima, a não ser que a aplicação insista (PBT_SetAnimationPolicy, secção 4.8)
ii_anim_durationinteger450Duração dessa chegada, em milissegundos (0 a 5000)
is_anim_easingstringease-outCurva da chegada (constantes EASING_*): linear, ease-out, back-out que passa e volta, bounce-out que ressalta, elastic-out que estala. É ela que dá carácter à animação
ii_anim_delayinteger0Desfasamento entre duas séries à chegada, em milissegundos (0 a 1000). Entram então uma após a outra em vez de surgirem juntas, o que dá ao gráfico o seu sentido de leitura. 0 = todas ao mesmo tempo
is_formatstring""O formato de todos os números que o gráfico escreve — eixos de valores, etiquetas e painel de valores — na sintaxe de um formato de DataWindow: #,##0.00, $#,##0, #,##0 "unidades", secções positivo;negativo;zero. Os separadores são os da língua de apresentação. Um eixo pode ter o seu (of_axis(AXIS_VALUE2).is_format), que prevalece sobre este. Vazio (ou um formato que não é numérico) = o número tal como está, à milésima
is_theme_stylestring""Estilo visual do componente (constantes THEME_STYLE_*); vazio = o da aplicação, seguido a cada mudança
is_theme_modestring""Variante clara ou escura (constantes THEME_MODE_*); vazio = a da aplicação, seguida a cada mudança
il_theme_accentlong-1Cor de acento deste componente (-1 = acento do tema)
is_tooltipstring""Dica simples mostrada ao passar sobre o componente
is_super_tooltip_titlestring""Título da dica enriquecida (tem precedência sobre is_tooltip)
is_super_tooltip_textstring""Texto da dica enriquecida (marcação rica aceite)
is_super_tooltip_imagestring""Imagem da dica enriquecida

Métodos #

MétodoPapel
of_set_categories ( string as_labels[] )As etiquetas do eixo de categorias — texto: uma etiqueta de marcação que contenham é retirada, e o eixo, o painel e #x# dizem o mesmo. A chamar antes das séries. Devolve 0 uma vez aplicado, -2 se o componente não estiver criado
of_set_value_labels ( string as_labels[] )Etiquetas no eixo dos valores. Vazio — o caso normal — esse eixo carrega números. Preenchido, carrega faixas como o eixo de categorias: o quadro de duas categorias em que se desenha um mapa de calor. Devolve 0 uma vez aplicado, -2 se o componente não estiver criado
of_get_value_labels ( ref string as_labels[] )Preenche as_labels[] com o que o eixo dos valores carrega agora e devolve o número. Zero = carrega números; uma etiqueta que contenha `` relê-se inteira
of_get_categories ( ref string as_labels[] )Preenche as_labels[] com as categorias que o gráfico carrega agora — depois de of_append_categories retirar as mais antigas, depois de of_from_datastore as ler — e devolve o seu número
of_get_last_error ( )Porque é que a última chamada foi recusada (um papel de of_map que as linhas não têm, um limite NULL, uma posição fora de uma série…), ou quantas linhas o último of_from_datastore pôs de lado e porquê; senão o último erro da DLL, como para qualquer componente
of_add_heat_series ( string as_key, string as_label, long al_x[], long al_y[], double ad_weight[] )Um mapa de calor: uma célula por par (categoria, etiqueta de valor), colorida pelo seu peso. al_x é o posto da categoria e al_y o da etiqueta, ambos a partir de 1 — os postos de um array PowerScript, que um duplo ciclo escreve sem cálculo. Definir antes as duas listas. Um peso NULL é uma célula vazia: aí nada é desenhado, etiquetado nem clicável. Devolve 0 uma vez adicionada, -5 se a chave estiver vazia, contiver / ou `, ou já estiver tomada, -2` se o componente não estiver criado
of_add_ohlc_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] )Uma série OHLC: a amplitude do mínimo ao máximo, um traço à esquerda para a abertura e outro à direita para o fecho. Quatro números por ponto, e o eixo lê-se pelo máximo e pelo mínimo — os outros dois estão dentro por construção. Os quatro arrays são truncados ao mais curto. Devolve 0 uma vez adicionada, -5 se a chave estiver vazia, contiver / ou `, ou já estiver tomada, -2` se o componente não estiver criado
of_add_candle_series ( string as_key, string as_label, double ad_open[], double ad_high[], double ad_low[], double ad_close[] )Os mesmos quatro números, desenhados em velas: um pavio do mínimo ao máximo e um corpo cheio entre a abertura e o fecho. Um doji — abertura igual ao fecho — guarda um pixel de corpo, para continuar a ser uma linha que o olho encontra. Devolve 0 uma vez adicionada, -5 se a chave estiver vazia, contiver / ou `, ou já estiver tomada, -2` se o componente não estiver criado
of_set_series_ohlc ( string as_key, double ad_open[], double ad_high[], double ad_low[], double ad_close[] )Novas cotações para uma série financeira já traçada. O que of_set_series_values é para uma série de valores. Devolve 0 uma vez aplicado, -5 se nenhuma série tiver esta chave ou se não for financeira, -2 se o componente não estiver criado
of_get_series_ohlc ( string as_key, ref double ad_open[], ref double ad_high[], ref double ad_low[], ref double ad_close[] )Preenche os quatro arrays com o que a série carrega agora e devolve o número de pontos. Uma série não financeira devolve 0
of_add_series ( string as_key, string as_label, string as_type, double ad_values[] { , long al_color } )Adiciona uma série com o seu tipo — TYPE_BAR, TYPE_LINE, TYPE_AREA, TYPE_SCATTER ou TYPE_STEPLINE; a sobrecarga recebe também a sua cor (RGB()), senão a paleta escolhe. Um valor NULL (SetNull) é um buraco: aí nada é desenhado, etiquetado nem clicável, e uma linha interrompe-se. Uma chave já tomada é recusada, nunca substituída: of_set_series_values e o handle of_item mudam uma série que existe. Devolve 0 uma vez adicionada, -5 se o tipo não for um destes cinco (um mapa de calor e as séries financeiras têm o seu método), ou se a chave estiver vazia, contiver / ou `, ou já estiver tomada, -2` se o componente não estiver criado
of_set_series_values ( string as_key, double ad_values[] )Novos valores para uma série já traçada, o resto intacto. É a chamada de um painel vivo: a série mantém a sua identidade, por isso as formas deslizam em vez de saltar. Um valor NULL é um buraco. Devolve 0 uma vez aplicado, -5 se nenhuma série tiver esta chave ou se tiver pontos ou cotações (of_set_series_points, of_set_series_ohlc substituem-nos), -2 se o componente não estiver criado
of_set_point_color ( string as_key, long al_position, long al_color )A cor de um ponto — o mês que ultrapassou o seu limite, a vermelho. al_position conta a partir de 1; -1 (ou NULL) devolve ao ponto a cor da sua série. Barras, marcadores de linha e pontos de nuvem tomam-na, e desliza com o seu ponto num gráfico em direto. Devolve 0 uma vez aplicado, -5 se nenhuma série tiver esta chave, se a posição estiver fora da série, ou para um mapa de calor ou uma série financeira (as suas cores são a sua escala e o seu sentido), -2 se o componente não estiver criado
of_get_point_color ( string as_key, long al_position )Devolve a cor (um long RGB()) que of_set_point_color — ou uma coluna ROLE_COLOR — deu ao ponto al_position, contado a partir de 1, ou -1 quando não tem (toma a cor da sua série), e para uma chave ou uma posição desconhecida
of_append_values ( string as_key, double ad_values[], long al_max_points )Um gráfico em direto: acrescenta novos valores no fim de uma série e retira os mais antigos assim que tiver mais de al_max_points (0 = sem limite). Só viajam os valores novos — a série não é reenviada a cada tique. A combinar com of_append_categories. As novas formas sobem sozinhas, as outras deslizam. Acrescente cada série, com o mesmo máximo que of_append_categories: uma série esquecida desfasa-se das suas categorias. Devolve 0 uma vez aplicado, -5 se nenhuma série tiver esta chave ou se tiver pontos ou cotações, -2 se o componente não estiver criado
of_append_categories ( string as_labels[], long al_max_count )Novas categorias no fim do eixo, as mais antigas retiradas além de al_max_count (0 = sem limite): as etiquetas de um gráfico em direto deslizam com os seus valores. Acrescente cada série com of_append_values e o mesmo máximo. Devolve 0 uma vez aplicado, -2 se o componente não estiver criado
of_add_point_series ( string as_key, string as_label, double ad_x[], double ad_y[] { , double ad_weight[] } )Uma série posicionada por valor nos dois eixos: x diz onde ao longo do eixo de categorias, y a que altura. Esse eixo deixa então de ser um eixo de categorias — passa a ser um segundo eixo de valores, com as suas graduações. Uma sobrecarga aceita um peso por ponto, que dimensiona a bolha. Um peso NULL mantém o tamanho predefinido, fora da escala das outras. Não misture estas séries com séries de valores num gráfico de categorias: as etiquetas das categorias dão lugar às graduações. Devolve 0 uma vez adicionada, -5 se a chave estiver vazia, contiver / ou `, ou já estiver tomada, -2` se o componente não estiver criado
of_set_series_points ( string as_key, double ad_x[], double ad_y[], double ad_weight[] )Novos pontos para uma série que já os carrega. O que of_set_series_values é para uma série de valores. Devolve 0 uma vez aplicado, -5 se nenhuma série tiver esta chave ou se tiver valores ou cotações, -2 se o componente não estiver criado
of_get_series_points ( string as_key, ref double ad_x[], ref double ad_y[], ref double ad_weight[] )Preenche os três arrays com o que a série carrega agora e devolve o número de pontos. Uma série de valores não responde nada em ad_x: não tem abcissa própria
of_get_series_values ( string as_key, ref double ad_values[] )Preenche ad_values[] com o que a série carrega agora e devolve o número. Leitura viva : consulta o gráfico, não o último envio
of_remove_series ( string as_key )Retira uma série; as outras mantêm a cor — tomada ao serem acrescentadas — e a visibilidade; a sua tooltip e as suas cores de item vão com ela. O seu handle (of_item) é destruído com ela: um of_item seguinte na mesma chave cria um novo. Devolve 0 uma vez retirada, -5 se nenhuma série tiver esta chave, -2 se o componente não estiver criado
of_clear ( )Esvazia o gráfico — séries e categorias; os handles de série vão com elas. Os eixos mantêm as suas definições e as suas secções. Devolve 0 uma vez esvaziado, -2 se o componente não estiver criado
of_from_datastore ( datastore ads )Alimenta o gráfico a partir de um DataStore (um DataWindow, um DataWindowChild: sobrecargas), como o gráfico de um DataWindow: uma coluna de categorias, uma coluna de valores e, se existir, uma coluna de séries — uma série por cada valor encontrado, uma série com o nome da coluna dos valores sem ela. As linhas que partilham uma categoria e uma série são somadas; as categorias vêm pela ordem das linhas (ordene o DataStore); uma categoria sem linha é um buraco. Uma coluna de cor colore o seu ponto. Uma coluna desempenha um papel quando tem o seu nome (category, series, value, color) ou quando of_map o diz; números e datas do posto são lidos corretamente. Dado de novo, o gráfico muda no lugar: uma série mantém o tipo, a cor e o eixo, uma série acrescentada à mão nunca é tocada; uma nova série é uma barra. Devolve 0 uma vez carregado (as linhas cuja série não pode ser uma chave são saltadas: of_get_last_error diz quantas), -5 se o DataStore não for válido ou nenhuma coluna desempenhar ROLE_CATEGORY ou ROLE_VALUE (of_get_last_error diz qual), -2 se o componente não estiver criado
of_map ( string as_role, string as_column )Dá um papel a uma coluna do DataStore (ROLE_CATEGORY, ROLE_SERIES, ROLE_VALUE, ROLE_COLOR) quando o seu nome não o diz. Antes de of_from_datastore, ou depois: as linhas são relidas. Uma coluna vazia devolve o papel à coluna que tem o seu nome. Devolve 0 uma vez definido, -5 se o papel não for uma constante ROLE_ ou a coluna não for uma do último DataStore, -2 se o componente não estiver criado
of_reload ( )Relê as linhas do DataStore (ou do DataWindow) dado a of_from_datastore — depois de um Retrieve, de uma edição, de um filtro — e muda o gráfico no lugar: as formas deslizam para os novos valores. Devolve 0 uma vez relido, -5 se nenhum DataStore tiver sido dado ou já não for válido, -2 se o componente não estiver criado
of_item ( string as_key )Devolve a pega de uma série, para a alterar depois
of_axis ( string as_axis )Devolve a pega de um eixo (AXIS_CATEGORY, AXIS_VALUE, AXIS_VALUE2), para o ajustar depois. Qualquer outro papel não devolve nenhuma pega (IsValid() é falso)
of_add_axis_section ( string as_axis, string as_key, double ad_from, double ad_to, long al_color )Uma faixa através do traçado, por trás dos dados: « abaixo de 200 é mau ». Desenhada sob as formas, nunca compete com elas. No eixo das categorias, ad_from e ad_to são posições contadas a partir de 1 (de 2 a 3 cobre a segunda e a terceira categoria). Uma cor -1 (ou NULL) é uma aguada pálida do acento do tema. Devolve 0 uma vez adicionada, -5 se o eixo não for um dos AXIS_*, se um limite for NULL ou se a chave estiver vazia, contiver / ou `, ou já estiver tomada nesse eixo, -2` se o componente não estiver criado
of_add_axis_threshold ( string as_axis, string as_key, double ad_at, long al_color, integer ai_thickness )Uma linha através do traçado num valor — um objectivo, um limite. O mesmo registo das faixas, mas desenhada para ser vista. Uma cor -1 (ou NULL) desenha-a no acento do tema. Devolve 0 uma vez adicionada, -5 se o eixo não for um dos AXIS_*, se um limite for NULL ou se a chave estiver vazia, contiver / ou `, ou já estiver tomada nesse eixo, -2` se o componente não estiver criado
of_clear_axis_sections ( string as_axis )Retira todas as faixas e todos os limiares de um eixo. Devolve 0 uma vez esvaziado, -5 se o eixo não for um dos AXIS_*, -2 se o componente não estiver criado
of_remove_axis_section ( string as_axis, string as_key )Retira uma faixa ou um limiar de um eixo: os outros ficam. Devolve 0 uma vez retirado, -5 se o eixo não for um dos AXIS_* ou não tiver nenhuma secção com esta chave, -2 se o componente não estiver criado
of_reset ( )Esvazia o gráfico — handles de série e de eixo incluídos — e repõe todas as propriedades no seu valor de origem. Devolve 0 uma vez feito, -2 se o componente não estiver criado

Sem chave (modo demo), o gráfico só desenha as suas 3 primeiras séries, legenda incluída. As outras ficam no modelo — of_count, of_get_series_values e os seus handles veem-nas — e a chave definida mostra-as sem que tenha de reenviar nada.


Eventos #

EventoDisparado quando
ue_point_clicked (string as_key, long al_index, double ad_value)Uma barra, um ponto, uma célula ou uma cotação foi clicada — ou confirmada com Enter: a chave da série, a posição do ponto na série, a partir de 1, e o seu valor — o do ponto seja qual for a forma da série: o y de uma nuvem, o peso de uma célula de calor, o fecho de uma cotação. No teclado, Esquerda/Direita percorrem as categorias e Cima/Baixo escolhem a série que o painel sublinha; uma série de pontos ou um mapa de calor escolhido percorre-se ponto a ponto. Um buraco não tem nada para clicar; o ponto em que está o teclado é rodeado, e anunciado ao leitor de ecrã
ue_point_rclicked (string as_key, long al_index, double ad_value, long al_x, long al_y)Um clique direito numa barra, num ponto, numa célula ou numa cotação — ou a tecla Menu (Shift+F10) no ponto em que está o teclado: a chave da série, a posição a partir de 1 e o valor, como ue_point_clicked os dá. É aí que se abre o seu menu; al_x, al_y: onde abrir o menu, em píxeis de ecrã — o ponteiro, ou pelo teclado (tecla Menu, Shift+F10) o meio da forma do ponto; um contextmenu abre-se aí tal como estão (uo_menu.of_show(al_x, al_y))
ue_rclicked ( )Um clique direito no gráfico onde nenhum ponto está desenhado — os eixos, o traçado vazio, a legenda. Um clique direito num ponto lança ue_point_rclicked em vez disso, nunca os dois
ue_series_toggled (string as_key, boolean ab_visible)O utilizador ocultou ou voltou a mostrar uma série com um clique na legenda. O que o gráfico mostra deixa então de ser o que a aplicação enviou. Definir ib_visible é um valor, como marcar uma caixa: este evento comunica o gesto do utilizador

A animação é uma entrada, não um cálculo: a geometria final é escrita de imediato e só a chegada é tocada. Um gráfico nunca mostrado — nascido fora do ecrã, num separador que ninguém abre — mostra portanto as barras certas, em silêncio.


Propriedades de item #

PropriedadeTipoPredefiniçãoPapel
is_labelstring""O nome da série, tal como a legenda o mostra
is_typestringbarbar · line · area · scatter · stepline (constantes TYPE_*). Muda o desenho desta série apenas — é isso que faz um gráfico combinado. Só um tipo da mesma família é aceite: uma série de valores entre bar, line, area, scatter e stepline, uma série financeira entre ohlc e candle; qualquer outro é ignorado e is_type relê o tipo mantido
il_colorlong-1Cor da série (RGB()). -1 enquanto nenhuma estiver definida: a paleta escolhe, ao acrescentar, e a série mantém-na: retirar outra série nunca a recolore. Um ponto pode tomar a sua (of_set_point_color). As cores de item herdadas (il_accent, il_back_color, il_text_color e as suas variantes ao passar) não têm efeito numa série: decide il_color
ib_visiblebooleantruefalse oculta uma série sem a retirar — a legenda guarda o caminho de volta. Como uma caixa de verificação, é um valor definido: ue_series_toggled comunica o clique do utilizador na legenda
ib_secondarybooleanfalseTraça a série no segundo eixo. É assim que um número e um montante vivem no mesmo gráfico
ib_data_labelsbooleanfalseEscreve o valor de cada ponto ao seu lado. Desligado por omissão: em cinquenta pontos as etiquetas tapam o desenho que explicam
is_label_formatstring""O que diz cada etiqueta e cada linha do painel: #y# o valor, #x# a categoria (o x de uma série de pontos, a coluna de uma célula de calor), #v# a linha de uma célula de calor, #label# o nome da série, #open# #high# #low# #close# as cotações; o resto escreve-se tal como está — "$#y#K". Vazio = o valor sozinho. Uma etiqueta escrita dentro de uma barra empilhada fica a preto ou a branco, conforme a sua barra suporta
id_smoothnessdouble1Só linhas e áreas: quão arredondada é desenhada a linha, 0 = segmentos retos, 1 = plenamente curva, como a desenha o LiveCharts. Uma linha em escada ignora-o — diz que o nível se MANTEVE até à categoria seguinte, uma curva diria que derivou. Uma curva pode passar para além dos seus pontos; é cortada no quadro do traçado e nunca pinta sobre os rótulos dos eixos
ib_fillbooleantrueLinhas e áreas: a aguada sob o traço, até ao eixo, no tom da série. É a remoção que é o acto deliberado — para uma linha posta por cima de outra coisa (colunas, bandas de eixo coloridas) que a aguada esconderia
il_fill_colorlong-1A cor dessa aguada. -1 = a da própria linha
is_markerstring"circle"Linhas, escadas e nuvens de pontos: a FORMA do marcador em cada ponto (constantes MARKER_*: none, circle, square, triangle, diamond). Não é decoração — duas linhas que se cruzam, impressas a cinzento, distinguem-se pelo seu marcador e por mais nada
ii_thicknessinteger2Linhas e áreas: a espessura do traço, em píxeis
il_point_countlong0Quantos pontos carrega esta série — valores, pares (x, y) ou cotações (só leitura). Um long: uma série em direto pode guardar mais de 32 767
il_cold_colorlong-1Só mapas de calor: o extremo FRIO da escala, a leitura mais leve. -1 = a escala própria do componente, um só azul, do muito pálido ao intenso
il_mid_colorlong-1O ponto MÉDIO. Três pontos e não dois: interpolar de uma ponta à outra desbota o meio da escala, onde está a maior parte das leituras. -1 = o azul médio do componente
il_hot_colorlong-1O extremo QUENTE, a leitura mais pesada. É o que a legenda mostra. -1 = o azul intenso do componente
il_up_colorlong-1Só séries financeiras: a cor de um ponto que fecha acima da sua abertura. -1 = o verde do componente
il_down_colorlong-1E a de um ponto que fecha abaixo. Duas cores porque o sentido é o que se lê num gráfico assim — uma só ocultá-lo-ia. -1 = o vermelho do componente
is_tooltipstring""A sua dica, escrita no painel de valores, logo sob a linha da série — só quando é a série apontada (a sua barra, o seu ponto ou a sua linha sob o rato, ou a série escolhida no teclado por Cima / Baixo), nunca para as outras séries da coluna, nunca como segunda bolha. Uma coluna percorrida onde nenhuma forma está desenhada não aponta nenhuma série. Com ib_value_tooltip a false, o painel abre-se na mesma para ela, sem os números. Uma série de pontos ou um mapa de calor mostra-a no painel que o teclado abre sobre o seu ponto. Marcação aceite
is_super_tooltip_titlestring""O título a negrito da sua dica, escrito no painel sob a sua linha
is_super_tooltip_textstring""O texto da sua dica, no painel. Marcação aceite
is_super_tooltip_imagestring""Uma imagem no topo da sua dica, no painel (caminho do bundle, caminho absoluto ou resources.dll:nome)

Propriedades de eixo #

PropriedadeTipoPredefiniçãoPapel
is_titlestring""Título escrito ao longo do eixo. Vazio = sem título, e sem espaço reservado para um. A dica e as cores de item que um identificador de eixo herda (is_tooltip, is_super_tooltip_*, il_accent, il_back_color, il_text_color…) não têm efeito num eixo
id_mindoubleNULLLimite inferior imposto. Ganha aos dados e não é arredondado: quem escreve 0 quer 0. NULL (SetNull) não impõe nada: o eixo volta a seguir os seus dados, e um limite livre relê-se NULL (IsNull), nunca 0. Livre, um eixo de valores só inclui o zero se uma barra ou uma área assentar nele: cotações e linhas leem-se no seu próprio intervalo
id_maxdoubleNULLLimite superior imposto, mesma regra. O que o ultrapassa é cortado na borda do traçado
id_stepdouble0Distância entre duas linhas de grelha, em valores. 0 = um passo redondo lido do intervalo
ii_label_rotationinteger0Rotação das etiquetas deste eixo, em graus (-90 a 90) — nomes de categoria ou graduações de valores. Doze nomes de meses só cabem por baixo de um gráfico inclinados; quando ainda não cabem, o gráfico escreve um em cada N, sempre o primeiro e o último
ib_separatorbooleantrueAs suas linhas de grelha. Um eixo de categorias raramente precisa delas, um de valores quase sempre
ii_section_countinteger0Quantas faixas e limiares este eixo carrega (só leitura)
ib_logarithmicbooleanfalseSó eixos de valores: uma escala logarítmica, graduada por décadas (1, 10, 100…), cada década com a mesma altura — para números que abrangem várias ordens de grandeza. O zero e os valores negativos não têm lugar nela e não são desenhados
is_formatstring""O formato deste eixo — as suas graduações, e as etiquetas e o painel das séries traçadas nele — por cima do is_format do gráfico: um montante de um lado, um número de encomendas do outro. Mesma sintaxe (#,##0, 0.0 "u"…). Vazio = o formato do gráfico

Exemplos #

Ajustar a animação conforme o ecrã #

// 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 as linhas por trás de um ponto #

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

Um painel 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)

Um gráfico em direto que 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)

Uma medida em falta, e o gráfico como imagem #

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

Uma faixa e um objetivo no eixo dos 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)"

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

A cor de um ponto, um menu noutro #

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

Boas práticas #

Herdado da base comum #

Estes membros existem em todos os componentes visuais — não são próprios deste. São detalhados uma só vez, nos capítulos transversais; esta tabela apenas diz onde os ler.

MembrosFunçãoDetalhado em
of_count · of_keys_at · of_hasPercorrer o que o componente contém3.2 Os items
of_resetRepor o componente a zero3.6 Repor um componente a zero: of_reset()
of_register_shortcut · of_clear_shortcutsAtalhos de teclado do componente3.5 Os atalhos de teclado
of_is_created · of_is_ready · of_get_last_errorSe nasceu, se está pronto, o que falhou3.7 Diagnóstico
of_save_as_png · of_save_as_jpgExportar a renderização como imagem3.8 Exportar a representação como imagem
of_set_redrawAgrupar as alterações num único repinte3.10 Boas práticas
of_preload_iconsÍcones mostrados sem atrasoApresentação instantânea: of_icon
of_set_translationTraduzir uma legenda do componente5.2 Adaptar uma etiqueta: of_set_translation
of_focus_webviewDar o foco ao componente6.4 Teclado e focus
of_print · of_print_to_pdfImprimir, ou escrever um PDF6.9 Imprimir
of_set_property · of_get_property · of_component_nameControlar uma propriedade pelo nome3.1 O motor de propriedades
is_accessible_name · is_accessible_descriptionO nome e a descrição que um leitor de ecrã diz3.4 Propriedades e eventos opcionais

Duas ajudas não são herdadas: of_icon e of_escape_markup vivem em n_pbt_utils. Declare um — n_pbt_utils lnv_utils, nada a criar — e chame-as nele.

← Referência dos componentes · Índice do guia