使用 gnuplot 绘制单个值?

Plotting a single value with gnuplot?

我有以下 csv 文件:

timestamp,unit,maximum,average
Thu Feb 05 14:54:00 GMT 2015,Percent,13.0,4.503333333333333

当我运行以下bash脚本就可以了:

#!/bin/bash

graph_results() {
  input=cpu-samples.csv
  output=cpu-samples.png
gnuplot <<- eor
  set terminal png 
  set output '${output}'
  set style data linespoints
  set xdata time
  set timefmt '%b %d %H:%M:%S GMT %Y'
  set format x '%b %d %Y %H:%M'
  set datafile separator ","
  set xlabel "timestamp"
  set ylabel "percent"
  set xtics rotate
  plot '< tail -n +2 ${input} | cut -f 1 --complement -d" "' using 1:3 title 'Maximum', '' using 1:4 title 'Average'
eor
}

graph_results

我收到以下错误:

bash-4.1$ ./run_gnuplot 
Could not find/open font when opening font "arial", using internal non-scalable font
Warning: empty x range [4.76463e+08:4.76463e+08], adjusting to [4.71699e+08:4.81228e+08]

生成的图表上有正确的数据点和时间戳,但图表中 x 轴的日期值不正确。

当 csv 文件中有多个值时,它工作正常,但只有一个值时则不然。我意识到错误消息是因为对于一个值,x 轴的开始和结束范围是相同的(如此处所述http://gnuplot.10905.n7.nabble.com/empty-x-range-td1650.html)。

我知道我可以设置一个范围如下:

set xrange

但我不确定在我的案例中如何使用,因为我使用的是自定义日期格式,而且我不知道开始日期和结束日期应该是什么,因为生成的数据是动态的?

使用自定义 timefmt 时,还必须使用以下格式指定 xrange

set xrange ["Feb 04 00:00:00 GMT 2015":"Feb 09 00:00:00 GMT 2015"]

或者您可以使用整数、i.e.a 时间戳来设置 xrange。对于 5.0 版,下面的行等同于上面的字符串设置:

set xrange [1423008000:1423440000]

请注意,在 4.6 版本之前,gnuplot 使用 2000 年 1 月的第一个时间作为其时间戳的时间参考,并且仅从 5.0 开始使用标准的 Unix 时间戳。所以在 4.6 之前,第一行中字符串设置的等效命令是

set xrange [476323200:476755200]