使用gnuplot批量画图

处理数据使用gnuplot画图,遇到一个需要批量画图的需求,即将2年的数据,以每28天一张图绘制,一共大概绘制26张左右。

在gnuplot中,也可以使用do循环来绘制,就是在处理时间变化的时候要注意,代码如下:

set xdata time
set timefmt "%Y-%m-%dT%H"
set xtics format "%Y-%m\n%H:%M" nomirror

set term png size 1600,1200
date1=strptime("%Y-%m-%dT%H",'2015-01-01T0')
do for [t=0:25] {
outfile = sprintf('shanghai-hourly-%03i.png',t)
set output outfile
set multiplot
set size 1,0.5
set origin 0,0.5
clear
date2=date1+(14*24-1)*3600
set xrange [date1:date2]
plot 'weibonum-shanghai-hour.txt' u 1:3 w lp t ''
set origin 0,0
clear
date1=date2+3600
date2=date1+(14*24-1)*3600
set xrange [date1:date2]
replot
unset multiplot
unset output
date1=date2+3600
}

用php处理时间文本

从数据库中直接导出的文本(数据的日期范围及服务次数):
2 2003-07-19 2003-08-18
10 2004-03-22 2004-03-22
9 2005-11-05 2005-11-05
4 2006-10-01 2008-10-31
18 2007-01-01 2009-07-15

想把其中的服务次数累加到每一天上去,本来想用sql直接处理,结果没有想到什么好的方法,只好请小李写了一个脚本来处理:

<?php
$file_handle = fopen("./water-time-service.txt", "r");
$arr = array();
$index = 0;
while (!feof($file_handle)) {
	$index ++;
   $line = fgets($file_handle);
   $times = (int)mb_substr($line,0,2,"UTF-8");
   $date_start = trim(mb_substr($line,2,11,"UTF-8"));
   $date_end = trim(mb_substr($line,13,11,"UTF-8"));
   $end_day = strtotime($date_end);
   $days = round((strtotime($date_end) - strtotime($date_start)) / (3600*24)) + 1;
   $_thisline = array();
   for(;;)
   {
	   if($days < 1)
	   {
		   break;
	   }
	   $_thisline[] = date("Y-m-d",$end_day - ($days - 1) * (3600 * 24));
	   $days --;
   }
   foreach($_thisline as $v)
   {
	   @$arr[$v] += $times;
   }
}
fclose($file_handle);
foreach($arr as $n=>$v) echo $n. " ". $v."\r\n";
?>

这样就能处理成这样的结果:
2003-07-19 2
2003-07-20 2
2003-07-21 2
2003-07-22 2
2003-07-23 2

然后就可以用gnuplot画图了。water-time-service

用gnuplot画双轴曲线时序图

时序图是常见的一种数据绘图,要画出类似excel中的双y坐标轴曲线图,可以在gnuplot如此处理:

set xdata time
set xlabel ‘ ‘
set timefmt “%Y-%m”
set grid
set y2range [0:50]
set ylabel ‘Datasets’
set y2label ‘Orders’
set timefmt “%Y-%m”
set xrange [‘2010-08′:’2012-12’]
set format x ‘%Y-%m’
set xtics nomirror rotate by -45
plot “water-service.txt” using 1:2 smooth csplines lw 2 lc rgb ‘red’ title ‘Datasets’,” u 1:2 w points pt 4 lc rgb ‘red’ t ”, ” using 1:3 axes x1y2 smooth csplines lc rgb ‘blue’ title ‘Orders’, ” u 1:3 axes x1y2 w points pt 4 lc rgb ‘blue’ t ”

数据如下:
Continue reading “用gnuplot画双轴曲线时序图”