Gerando diagramas (em PNG ou JPG) a partir do console?

5

A partir desses dados, posso criar um diagrama no OpenOffice:

$ cat time.log 
2014-04-29 08:15:34 1.00
2014-04-29 08:15:36 1.00
2014-04-29 08:15:42 1.50
2014-04-29 08:15:47 2.00
2014-04-29 08:15:55 2.00
2014-04-29 08:16:02 3.00
2014-04-29 08:16:10 4.00
2014-04-29 08:19:31 6.00
$ 

P:Mascomopodemoscriaromesmodiagramacomumprogramadeconsole?ExistealgumaplicativogeradordediagramasnoLinux(usandooUbuntu12.04)?Um"time.txt" pode ter uma média de 200 linhas.

p.s .: estas são saídas da execução de comandos:

$ { /usr/bin/time -f "%e" sleep 6 ; } 2>&1 | sed "s/^/'date "+%F %H:%M:%S"'\t/g" >> time.log
    
por evachristine 29.04.2014 / 08:29

3 respostas

1

Como outros já apontaram, a Gnuplot é a ferramenta certa para o trabalho. Abaixo está o shell script para coletar os dados e gerar um histograma a partir dos dados com o Gnuplot:

#!/bin/sh
LOGFILE=./time.log
OUTFILE=./time-plot.png

{ /usr/bin/time -f "%e" sleep 6 ; } 2>&1 | sed "s/^/'date "+%F %H:%M:%S"'\t/g" >> "$LOGFILE"

gnuplot << EOF
set lmargin at screen 0.20
set rmargin at screen 0.85
set bmargin at screen 0.30
set tmargin at screen 0.85
set datafile separator " "
set title ""
set ylabel ""
set yrange [0:7]
set xlabel ""
set xtics rotate by 45 right
set style fill solid 1.00 noborder
set boxwidth 2 relative
set terminal png
set output "$OUTFILE"
plot "$LOGFILE" using 3:xticlabels(stringcolumn(1) . " " . stringcolumn(2)) with histogram notitle linecolor rgb 'blue'
EOF

Um exemplo de gráfico gerado para os dados de amostra fornecidos abaixo:

Observe que este exemplo usa as opções de alinhamento tic introduzidas no Gnuplot 4.6.0 para corresponder à rotação do rótulo do eixo x no diagrama de amostra. As opções de alinhamento right , left e center tic não estão disponíveis no pacote Gnuplot 4.4.3 para o Ubuntu 12.04. Se a aparência precisa não for um problema, substitua set xtics rotate by 45 right por exemplo set xtics rotate para tornar o script compatível com a versão mais antiga do Gnuplot.

    
por 29.04.2014 / 11:32
1

Você pode usar o latex para essa finalidade. Basta criar um modelo apropriado e depois juntá-los. Um exemplo rápido e sujo, supondo que seu time.log pareça mais amigável ao parser:

2014-04-29 08:15:34, 1.00
2014-04-29 08:15:36, 1.00
2014-04-29 08:15:42, 1.50
2014-04-29 08:15:47, 2.00
2014-04-29 08:15:55, 2.00
2014-04-29 08:16:02, 3.00
2014-04-29 08:16:10, 4.00
2014-04-29 08:19:31, 6.00

O modelo simples chama-o templ.tex (isso precisa ser otimizado para se ajustar aos seus dados):

\documentclass[12pt]{article}
\usepackage{bardiag}
\begin{document}

\bardiagrambegin{9.5}{20}{20cm}{1}{2}{1cm}{0.5cm}

E um pequeno script:

#!/bin/bash
IFS="
"
cat templ.tex > new.tex
for line in 'cat time.log';do
    echo ${line} | sed -e 's/\(.*\),\s*\(.*\)/\baritem\{\}\{\}{blue}/' >> new.tex
done
printf "\\bardiagramend{}{}\n\\end{document}" >> new.tex    
latex new.tex
    
por 29.04.2014 / 12:35
0

Algum tempo atrás eu tenho caso semelhante. Eu uso o gnuplot.

Você pode usar o seguinte exemplo (não testado)

diagram.p

set datafile separator " "
set title "Title"
set xlabel "Data"
set xtics rotate
set xdata time
set timefmt "%Y-%m-%d %H:%M:%s"
set format x "%Y-%m-%d %H:%M:%s"
set ylabel "Count"
set terminal png
set output "diagram.png"
plot ["2014-04-29 08:00":"2014-04-29 09:00"] 'time.log ' using 1:2 title "Diagram" with lines

gnuplot -e "load 'diagram.p'"
    
por 29.04.2014 / 08:53