Gráfico de Barras

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

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

Código: Selecionar todos


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)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

tela.png
tela2.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

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

Código: Selecionar todos

      @ 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

Dobrando a quantidade de colunas
tela.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

E dobrando de novo, aí ferrou kkkk
tela.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

Gráfico de Barras

Mensagem por carlos_dornelas »

Agora só falta a pizza!!

Brincadeiras a parte, ficou legal!!

[]s
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Gráfico de Barras

Mensagem por asimoes »

carlos_dornelas escreveu:Agora só falta a pizza!!

Brincadeiras a parte, ficou legal!!
É só procurar RmChart, aqui mesmo em Contribuições
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gráfico de Barras

Mensagem por JoséQuintas »

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: Selecionar todos

      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: Selecionar todos

      @ 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 170 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder