通过<;设置xtics;启动>&书信电报;增加>;在gnuplot中不起作用

通过<;设置xtics;启动>&书信电报;增加>;在gnuplot中不起作用,gnuplot,Gnuplot,我使用gnuplot绘制以下内容: $Data <<EOD time_,value 1-23:59:58,1 1-23:59:59,2 2-00:00:00,3 2-00:00:01,4 2-00:00:02,5 EOD set term png size 800,600 set output "ask.png" set datafile separator comma set grid set xdata time set timefmt "%d-%H

我使用gnuplot绘制以下内容:

$Data <<EOD

time_,value

1-23:59:58,1

1-23:59:59,2

2-00:00:00,3

2-00:00:01,4

2-00:00:02,5

EOD

set term png  size 800,600 

set output "ask.png"

set datafile separator comma

set grid

set xdata time

set timefmt "%d-%H:%M:%S" 

set format x "%H:%M:%S" 

set xtics nomirror

set autoscale xfix

set autoscale x2fix

startnumber=1

xticdata=2

mxticdata=2

set xtics xticdata rotate

set mxtics mxticdata

set x2data

set x2tics startnumber, xticdata rotate

set mx2tics mxticdata

set link x2 via x+1 inverse x-1


plot $Data using 1:2 title columnheader(2)

set output

$Data最快的修复方法是

set link x2 via x-86397 inverse x+86397
但这取决于第2列中的时间步长和数字。如果您的时间步长是严格规则的,为1秒,而第2列只是计数,那么第2列是多余的。 时间数据从1970年1月1日00:00:00开始以秒的形式在内部处理。
一天有86400秒。检查
帮助时间/日期

最快的修复方法是

set link x2 via x-86397 inverse x+86397
但这取决于第2列中的时间步长和数字。如果您的时间步长是严格规则的,为1秒,而第2列只是计数,那么第2列是多余的。 时间数据从1970年1月1日00:00:00开始以秒的形式在内部处理。
一天有86400秒。检查
帮助时间/日期

如果想法是x2轴应标有第2列的内容,而不管其与第1列的数字关系如何,则可以使用:

set xdata time
set timefmt "%d-%H:%M:%S" 
set format x "%H:%M:%S" 
set xtics nomirror
set x2tics nomirror

set link x2

plot $Data using 1:2:x2ticlabels( int($0+1)%2 ? strcol(2) : "" )  title columnheader(2)

这将为每个数据点创建一个x2轴刻度标签。偶数为空和奇数为第2列中的任何内容。

如果想法是x2轴应标记第2列的内容,而不管其与第1列的数字关系如何,则可以使用:

set xdata time
set timefmt "%d-%H:%M:%S" 
set format x "%H:%M:%S" 
set xtics nomirror
set x2tics nomirror

set link x2

plot $Data using 1:2:x2ticlabels( int($0+1)%2 ? strcol(2) : "" )  title columnheader(2)

这将为每个数据点创建一个x2轴刻度标签。偶数编号的设置为空白,奇数编号的设置为第2列中的任何值。

我只将x轴设置为时间格式,而不是x2轴。为什么
设置扩展数据时间
会影响数据的格式?这是gnuplot的bug吗?由于第1/2列中我的项目的数据无法预测,是否有其他方法解决此问题?根据gnuplot的手册,“如果未指定选项,数据解释将恢复正常”(请参阅手册中的扩展数据部分)。但在我的示例中,
set x2data
似乎不起作用。为什么?你连接x1和x2轴。正如我所说的,对于gnuplot,时间是从1970年1月1日起以秒为单位的。所以,这就是为什么x2轴以
86398
开头,对应于'01.01.1970 23:59:58?这只是一种不同的表现。实际上,第二栏是什么?只是一个计数器/索引还是实际数据?请更详细地描述您拥有的数据(我猜是数千个数据点,而不仅仅是这5个)以及最终的绘图结果应该是什么。第2列包含近50000条记录的数据是参数值,而不是计数器/索引。必须使用设置链接来对齐x轴和x2轴。我想显示计数器/索引的x2tic标签,它必须与xticlabels以相同的间隔与时间(第1列)相关。我只将x轴设置为时间格式,而不是x2轴。为什么
设置扩展数据时间
会影响数据的格式?这是gnuplot的bug吗?由于第1/2列中我的项目的数据无法预测,是否有其他方法解决此问题?根据gnuplot的手册,“如果未指定选项,数据解释将恢复正常”(请参阅手册中的扩展数据部分)。但在我的示例中,
set x2data
似乎不起作用。为什么?你连接x1和x2轴。正如我所说的,对于gnuplot,时间是从1970年1月1日起以秒为单位的。所以,这就是为什么x2轴以
86398
开头,对应于'01.01.1970 23:59:58?这只是一种不同的表现。实际上,第二栏是什么?只是一个计数器/索引还是实际数据?请更详细地描述您拥有的数据(我猜是数千个数据点,而不仅仅是这5个)以及最终的绘图结果应该是什么。第2列包含近50000条记录的数据是参数值,而不是计数器/索引。必须使用设置链接来对齐x轴和x2轴。我想显示计数器/索引的x2tic标签,它必须与xticlabels的时间间隔相同(第1列),谢谢@Ethan。基于您的想法,因为第2列不是索引/计数器,所以我尝试如下:
使用1:2:x2ticlabels(int($0+1)%xticdata==1?startnumber+xticdata*int($0):“”)绘制$Data
。但这是行不通的。这个plot命令有什么问题?xticlabels的内容应该是字符串。您的命令混合了数字和字符串,并且我认为会产生一条关于使用非字符串数据的字符串操作的错误消息。如果要从数值表达式创建字符串,请使用
sprintf
函数对其进行格式化。
plot$数据使用1:2:x2ticlabels(int($0+1)%2?..
是一个好的、清晰的方法。这样,每个x2tic都位于x2轴上。因为我的项目中有近50000个数据点,这导致x2tic轴上有太多x2tic。有没有更好的方法来间隔显示x2tic?谢谢@Ethan。基于您的想法,因为第2列不是索引/计数器,所以我尝试如下:
使用1:2:x2ticlabels(int($0+1)%xticdata==1?startnumber+xticdata*int($0):“”)
。但这不起作用。这个plot命令有什么问题?xticlabels的内容应该是字符串。你的命令混合了数字和字符串,我认为会产生一条关于使用非字符串数据进行字符串操作的错误消息。如果你想从数值表达式创建字符串,请使用
sprintf
函数重新格式化。
使用1:2:x2ticlabels(int($0+1)%2?…
绘制$Data是一种很好且清晰的方法。这样,每个x2tic都位于x2轴上。因为我的项目中有近50000个数据点,这会导致x2tic轴上的x2tic太多。是否有更好的方法以间隔显示x2tic?