从控制台生成图表(PNG 或 JPG 格式)?

从控制台生成图表(PNG 或 JPG 格式)?

根据这些数据,我可以在 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
$ 

在此输入图像描述

问:但是我们如何使用控制台程序创建相同的图表呢? Linux(使用 Ubuntu 12.04)上有图表生成器应用程序吗?一个“time.txt”平均可以有 200 行。

ps:这些是命令执行的输出:

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

答案1

正如其他人已经指出的那样,Gnuplot是适合这项工作的工具。下面是用于收集数据并使用 Gnuplot 从数据生成直方图的 shell 脚本:

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

为下面提供的示例数据生成的示例图:

从样本输入生成的示例图

请注意,此示例使用 Gnuplot 4.6.0 中引入的 tic 对齐选项来匹配示例图中的 x 轴标签旋转。right和tic 对齐选项leftcenter为 Ubuntu 12.04 打包的 Gnuplot 4.4.3 中不可用。如果精确的外观不是问题,请替换set xtics rotate by 45 right为,set xtics rotate以使脚本与旧版本的 Gnuplot 兼容。

答案2

您可以使用乳胶来达到此目的。只需为自己制作一个合适的模板,然后将它们剪切在一起即可。一个快速而肮脏的例子,假设你的 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

简单的模板将其称为 templ.tex(必须对其进行优化以适合您的数据):

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

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

还有一个小脚本:

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

答案3

前段时间我也有类似的案例。我使用 gnuplot。

您可以使用以下示例(未测试)

图.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'"

相关内容