GNUplot将采样数或文件行转换为分钟、小时、英里或其他一些x轴变量



这个问题有点通用,但它可以用很多方法。我们都使用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 ydataset 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)/MN/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

相关内容

  • 没有找到相关文章