Clipper On Line • Ver Tópico - Gráfico de Barras
Mudar para estilo Clássico
Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.
Postar uma resposta

Gráfico de Barras

01 Dez 2020 16:35

Criei agora rapidinho, pra passar pra outra pessoa, e acabei achando interessante o resultado.

Código:

PROCEDURE main

   LOCAL aValorList := {}
   LOCAL nMaiorValor, nDia, nLinha, nColuna, nValorDia, nLargura
   LOCAL nCor := 1

   SetMode( 30, 90 )
   CLS
   AAdd( aValorList, 123 )
   AAdd( aValorList, 234 )
   AAdd( aValorList, 127 )
   AAdd( aValorList, 50 )
   AAdd( aValorList, 60 )
   AAdd( aValorList, 80 )

   nMaiorValor := 0
   AEval( aValorList, { | e | nMaiorValor := Max( nMaiorValor, e ) } )

   nLargura := Int( 80 / ( Len( aValorList ) ) )
   @ 0, 2  TO 24, 2
   @ 24, 2 TO 24, 85
   FOR nDia = 1 TO Len( aValorList )
      nValorDia := aValorList[ nDia ]
      nLinha  := 24 - Int( nValorDia / nMaiorValor * 20 )
      nColuna := 4 + ( ( nDia - 1 ) * ( nLargura + 1 ) )
      @ 25, nColuna-1 SAY Padc( Right( Str( nDia, 2 ), nLargura - 1 ), nLargura - 1 ) COLOR "W/N"
      IF nValorDia != 0
         SetColor( Ltrim( Str( nCor, 2 ) ) + "/" + lTrim( Str( nCor, 2 ) ) )
         @ nLinha, nColuna, 23, nColuna+nLargura-1 BOX Replicate( Chr(219), 9 )
         nCor := iif( nCor == 15, 1, nCor + 1 )
      ENDIF
   NEXT
   Inkey(0)

Gráfico de Barras

01 Dez 2020 16:37

tela.png


tela2.png

Gráfico de Barras

01 Dez 2020 16:41

Foi interessante, usei a tabela de cores inteira, de 1 a 15, só não usei a preta.
E ficou legal mesmo assim.
Se fosse pensar antes de fazer, não ficaria legal assim... kkkk

Gráfico de Barras

01 Dez 2020 16:56

tela.png


Basicamente uma linha alterada, e uma acrescentada
Agora com valores, e permite nome maior nas colunas

Código:
      @ if( mod( nDia, 2 ) == 0, 25, 26 ), nColuna-1 SAY Padc( Right( Str( nDia, 2 ), nLargura - 1 ), nLargura - 1 ) COLOR "W/N"
      @ nLinha -1, nColuna - 1 SAY Ltrim( Str( aValorList[ nDia ] ) ) COLOR "W/N"


Se adaptar pra gráfico em pixels, melhor ainda...

É até curioso, mas parece que o fundo preto deu uma realçada no resto.

Gráfico de Barras

01 Dez 2020 17:01

Dobrando a quantidade de colunas

tela.png

Gráfico de Barras

01 Dez 2020 17:03

E dobrando de novo, aí ferrou kkkk

tela.png

Gráfico de Barras

01 Dez 2020 17:20

Então... o segredo nem é a programação, mas sim as fórmulas pra calcular.

referência largura de cada coluna

nLargura := Int( 80 / ( Len( aValorList ) ) )

referência maior valor

AEval( aValorList, { | e | nMaiorValor := Max( nMaiorValor, e ) } )

referência altura de cada barra

valor / maiorvalor * linhas disponíveis
Um detalhe sobre a altura, é que o ponto zero é embaixo e não encima, então ao invés de começar no zero, vai ser na última
nColuna = 24 - a altura que deu

referência pra mostrar os nomes pra cima/pra baixo, só ver se é par ou ímpar

linh = iif( Mod( nContador, 2 ) == 0, 25, 26 )

Com todos esses números, a distância vai ser nLargura, e a barra vai ser nLargura - 1.
O desenho da barra é apenas o @ Box da linha calculada, até a última linha
@ linhacalculada, colunacalculada, 24, colunacalculada + nLargura BOX replicate( Chr(219), 9 )

e o título de cada coluna, isso acima, mas uma linha a menos, pra ficar encima da barra.

é ir fazendo devagarzinho, uma coisa de cada vez, e acaba saindo.
Com o tempo... ir ajustando conforme precisar.

Gráfico de Barras

01 Dez 2020 18:42

Agora só falta a pizza!!

Brincadeiras a parte, ficou legal!!

[]s

Gráfico de Barras

01 Dez 2020 19:27

carlos_dornelas escreveu:Agora só falta a pizza!!

Brincadeiras a parte, ficou legal!!


É só procurar RmChart, aqui mesmo em Contribuições

Gráfico de Barras

01 Dez 2020 20:42

Agora à noite que vi, chamei de PIZZA o gráfico de BARRAS kkkkkk
Fiz a correção do título, pra não atrapalhar pesquisas.

é uma alternativa simples, vai que falha google, falha rmchart, ou 64 bits e não funcionar rmchart, já ajuda.
expliquei a idéia, assim cada um pode ajustar, ou criar de outro jeito, sem causar dependências.

Gráfico de Barras

02 Dez 2020 13:45

tela.png


Pequeno ajuste, pros nomes de cima das barras não grudarem, igual embaixo.
Apenas guardo a última linha usada, e comparo com a atual pra ver se são iguais.
Se forem iguais, tira uma linha.

Código:
      nLinhaTit := nLinha - 1
      IF nLinhaTit == nLinhaAnt
         nLinhaTit -= 1
      ENDIF
      nLinhaAnt := nLinhaTit


Também ajuste no texto inferior, se é linha diferente, dá pra dobrar o tamanho

Código:
      @ if( mod( nDia, 2 ) == 0, 25, 26 ), nColuna-1 SAY Padc( Str( nDia, 2 ), nLargura *2 ) COLOR "W/N"


test.prg
(1.48 KiB) Baixado 38 vezes


Esses meus testes, na pasta temporária, se auto-destroem depois de uns dias.
Fiz isso pra não ficar guardando testes.... a não ser que seja algo super, aí copio pra outra pasta.
Mas quando o teste pode ser interessante pra outros, posto aqui.
Postar uma resposta