如何跳过 gnuplot 中的重复标签?
How to skip duplicate labels in gnuplot?
我有一个图表,我想从一个看起来像这样的文件中添加标签
20151019,labela
20151020,labela
20151021,labela
20151022,labelb
20151023,labelb
但我只希望显示与之前的标签不同的标签。 (所以只把标签放在 20151019 和 20151022 上)目前我必须预处理文件以删除重复项。有没有办法在 gnuplot 中做到这一点?
通常,预处理文件是最好的选择。这也可以即时完成,比如
plot '< script.sh file' ...
因为可以使用这种预处理,gnuplot 对这种数据操作的支持有限。
在您的情况下,您可以使用一个技巧:将所有标签注册到一个字符串中,由一些未出现在标签中的字符分隔。然后你可以使用strstrt
查找是否有标签已经出现,否则跳过该点:
set datafile separator ','
set timefmt '%Y%m%d'
set xdata time
s = ''
known(c) = (strstrt(s, '@@'.strcol(c).'@@') > 0)
plot 'file.dat' using (use = known(2), s = s . (use ? '@@'.strcol(2).'@@ ' : ''), use ? timecolumn(1) : 1/0):(0):2 with labels
我不知道你有哪个y坐标,所以我用了0
。
我有一个图表,我想从一个看起来像这样的文件中添加标签
20151019,labela
20151020,labela
20151021,labela
20151022,labelb
20151023,labelb
但我只希望显示与之前的标签不同的标签。 (所以只把标签放在 20151019 和 20151022 上)目前我必须预处理文件以删除重复项。有没有办法在 gnuplot 中做到这一点?
通常,预处理文件是最好的选择。这也可以即时完成,比如
plot '< script.sh file' ...
因为可以使用这种预处理,gnuplot 对这种数据操作的支持有限。
在您的情况下,您可以使用一个技巧:将所有标签注册到一个字符串中,由一些未出现在标签中的字符分隔。然后你可以使用strstrt
查找是否有标签已经出现,否则跳过该点:
set datafile separator ','
set timefmt '%Y%m%d'
set xdata time
s = ''
known(c) = (strstrt(s, '@@'.strcol(c).'@@') > 0)
plot 'file.dat' using (use = known(2), s = s . (use ? '@@'.strcol(2).'@@ ' : ''), use ? timecolumn(1) : 1/0):(0):2 with labels
我不知道你有哪个y坐标,所以我用了0
。