Grafico Barra em Modo Texto
Enviado: 25 Abr 2021 05:13
Bom dia!
Alguem conhece alguma lib ou codigo de grafico de barra modo texto? Estou criando um modulo sobre a "lei do primeiro digito" (Lei de Benford/Newcomb). pesquisando na net, não encontrei nenhum código.
Até aqui, consegui fazer isso:
e o resultado é essa imagem anexa.
Se alguem tiver um codigo pra gerar grafico modo texto e puder compartilhar, eu agradeceria muito.
Obrigado!!
Att
Mauricio
Alguem conhece alguma lib ou codigo de grafico de barra modo texto? Estou criando um modulo sobre a "lei do primeiro digito" (Lei de Benford/Newcomb). pesquisando na net, não encontrei nenhum código.
Até aqui, consegui fazer isso:
Código: Selecionar todos
#include "box.ch"
// compilar: hbmk2 -lhbct
// ** hbct - log10()
function main()
local cCorBarE := "R+/N", cCorBarO := "BG+/N"
local aDigito, aDados
set decimals to 1
aDigito := { { 1, LOG10(1+(1/1))*100, "DIG1", cCorBarE }, ;
{ 2, LOG10(1+(1/2))*100, "DIG2", cCorBarE }, ;
{ 3, LOG10(1+(1/3))*100, "DIG3", cCorBarE }, ;
{ 4, LOG10(1+(1/4))*100, "DIG4", cCorBarE }, ;
{ 5, LOG10(1+(1/5))*100, "DIG5", cCorBarE }, ;
{ 6, LOG10(1+(1/6))*100, "DIG6", cCorBarE }, ;
{ 7, LOG10(1+(1/7))*100, "DIG7", cCorBarE }, ;
{ 8, LOG10(1+(1/8))*100, "DIG8", cCorBarE }, ;
{ 9, LOG10(1+(1/9))*100, "DIG9", cCorBarE } }
aDados := { { 1, 31.1, "DB_1", cCorBarO }, ;
{ 2, 16.6, "DB_2", cCorBarO }, ;
{ 3, 14.5, "DB_3", cCorBarO }, ;
{ 4, 8.6, "DB_4", cCorBarO }, ;
{ 5, 8.9, "DB_5", cCorBarO }, ;
{ 6, 7.7, "DB_6", cCorBarO }, ;
{ 7, 6.8, "DB_7", cCorBarO }, ;
{ 8, 4.1, "DB_8", cCorBarO }, ;
{ 9, 4.6, "DB_9", cCorBarO } }
cls
@ 00, 00, 50, 132 BOX B_SINGLE + SPACE(1)
SetMode(50, 132)
@ 01, 55 SAY "Digito" COLOR "R+/N"
@ 01, 64 SAY "Probabilidade" COLOR "R+/N"
for p := 1 to 9
@ p+1, 58 SAY ALLTRIM(STR(aDigito[p][1]))
@ p+1, 70 SAY ALLTRIM(STR(aDigito[p][2]))
next
// Tentativa em apresentar o grafico na vertical
// nCol := 2
// for d := 1 to 9
// imprimeBarra( nCol, aDigito[d][2], "", cCorBarE )
// nCol += 4
// imprimeBarra( nCol, aDados[d][2], aDados[d][3], cCorBarO )
// nCol += 4
// next
// Tentativa em apresentar o grafico na horizontal
TAMANHO := LEN(aDigito)
nLinha := 12
for d := 1 to TAMANHO
imprimeBarra_H( nLinha, aDigito[d][2], aDigito[d][3], cCorBarE )
nLinha++
imprimeBarra_H( nLinha, aDados[d][2] , aDados[d][3] , cCorBarO )
nLinha++
next
nLinha++
@ nLinha, 00
return nil
function imprimeBarra_H( nLinha, nPercent, cTitulo, cCorBar )
LOCAL nValor
nValor := int(nPercent)
@ nLinha, 02 SAY "[ " + cTitulo + " ]" COLOR cCorBar
nColuna := LEN(cTitulo) + 7
@ nLinha, nColuna SAY replicate(chr(219)+chr(219),nValor) + " " + ALLTRIM(STR(nPercent)) COLOR cCorBar
return nil
//
// Nota:
// - a linha 20 serah o piso;
// - a linha 10 serah o teto;
//
function imprimeBarra( nColuna, nPercent, cTitulo, cCorBar )
LOCAL nValor
nValor := (20 - (nPercent/10)) // trabalhando com decimais
nValor += (nValor - 20) // valor obtido apartir de 20 para 10 **
nValor += (nValor - 20) // para dobrar o tamanho da barra
@ 21, nColuna SAY cTitulo COLOR cCorBar
@ 22, nColuna SAY IF( cTitulo == "", "", alltrim(str(nPercent))) COLOR cCorBar
for b := 20 to nValor step -1
@ b, nColuna SAY chr(178) + chr(178) COLOR cCorBar
next
return nil
//
// TODO: Funcao: teste Qui Quadrado
//
Se alguem tiver um codigo pra gerar grafico modo texto e puder compartilhar, eu agradeceria muito.
Obrigado!!
Att
Mauricio