这个问题有点通用,但它可以用很多方法。我们都使用GNUplot在文件中记录的样本上绘制数据。
有一个数据记录器,每秒记录一次测量值。(因此,一个一小时长的文件有3600行,一个24小时的文件有86400行,可以是任何长度(如果要绘制,它将是样本上的y变量。但是,我如何获得数据来显示y变量在几分钟(ex samples/60(或几小时(samples/3600(内的变化?
如果涉及到一些数学,显然分钟或小时必须是浮动的,这没什么大不了的。我不需要真正的X轴时间(知道如何做也很酷(。我需要在X轴上显示24小时日志的86400个样本,从0到24。
这不一定只适用于时间。也许有人希望每1000个样本按公里标记,5280个样本按英里标记,或者1024个样本按计算机类型标签标记。
谢谢。
在时间/日期数据的特定情况下,gnuplot提供了一个命令,将特定轴的输入坐标视为以秒为单位测量的时间。最常见的情况是沿x轴的时间数据,您可以为其指定类似的内容
set xdata time
set timefmt "%Y-%m-%d" # Data read from the file looks like "2022-01-31"
set xtics time format "%d %b" # tics along x will look like "21 Jan"
关键是,即使使用基于时间的命令,存储为坐标的原始数字也总是以秒为单位。如果要以原始秒读取,请省略set xdata time
命令。xaxis-tic标签的输出格式仍然可以使用时间单位。相反,如果出于某种原因,您希望从包含天/小时等单位的文件中读取数据,但将其显示为秒,则可以保留set xdata time
,但更改为set xtics numeric
。
虽然不太常见,但等效命令(set ydata
、set ytics time format
…(也适用于其他轴。所以你可以有沿着y或x2的日期,依此类推
至于您的其他特定示例,gnuplot提供了科学概念和计算机风格单位(如1024字节=1 kibyte(中的量的格式选项。
有关格式选项的更详细列表,请参阅文档部分格式说明符。以下是该部分的表格(有单独的时间/日期文件(
The acceptable formats (if not in time/date mode) are:
Format Explanation
%f floating point notation
%e or %E exponential notation; an "e" or "E" before the power
%g or %G the shorter of %e (or %E) and %f
%h or %H like %g with "x10^{%S}" or "*10^{%S}" instead of "e%S"
%x or %X hex
%o or %O octal
%t mantissa to base 10
%l mantissa to base of current logscale
%s mantissa to base of current logscale; scientific power
%T power to base 10
%L power to base of current logscale
%S scientific power
%c character replacement for scientific power
%b mantissa of ISO/IEC 80000 notation (ki, Mi, Gi, Ti, Pi, Ei, Zi, Yi)
%B prefix of ISO/IEC 80000 notation (ki, Mi, Gi, Ti, Pi, Ei, Zi, Yi)
%P multiple of pi
如果您对其中任何一个有特定问题,请修改您的问题,提供几行显示所用格式的数据,以及您希望输出的更完整的描述或示例。
由于标签编辑,这个问题再次出现。显然,似乎对OP的回答没有任何兴趣,因为根本没有反馈。尽管如此,让我回答一下我从这个问题中理解的内容,也许这对其他人有帮助。
有一个伪列0,它基本上是从0开始的行索引。有关详细信息,请查看help pseudocolumns
。
如果您只有y数据,例如:
# y1 y2 y3 y4
1.1 1.2 1.3 1.4
2.1 2.2 2.3 2.4
3.1 3.2 3.3 3.4
4.1 4.2 4.3 4.4
5.1 5.2 5.3 5.4
6.1 6.2 6.3 6.4
因此,您缺少绘图的x坐标。简单地说,用一个合适的因子乘或除行号,即伪列0。
注意:请记住,gnuplot默认情况下会进行整数除法,即1/2=0
。为了强制浮点除法,您可以写1/2.
或1./2
,对于不确定是整数还是浮点的变量,您可以编写real(N)/M
或N/real(M)
(检查help real
(。然而,由于$0
(以及所有其他列(总是作为浮点数字返回,因此这里没有问题。为了确保始终写入60., 3600., 1000., 1024., 5280.
。
plot "myFile.dat" u ($0/60):2 # 1 line/second --> x-axis in minutes
plot "myFile.dat" u ($0/3600):2 # 1 line/second --> x-axis in hours
plot "myFile.dat" u ($0/1000):2 # 1 line/meter --> x-axis in kilometers
plot "myFile.dat" u ($0/1024**2):2 # 1 line/byte --> x-axis in MiB (mebibytes not megabytes!)
plot "myFile.dat" u ($0/5280):2 # 1 line/foot --> x-axis in miles