拥有以下文本文件
0 0 net0 aaaa bbbb cccc
1 1 net1 zzz
2 2 net2 xxx
3 3 net3 yyy
4 5 net4 ttt 0 0
5 5 net5
我需要将前两列描述的所有点绘制为x,y坐标,并在每个点处锚定以下列(例如3:6)中报告的信息。这些信息必须由换行符分隔,例如(0,0)中的点应该报告(当鼠标悬停在它上面时)
net0
aaaa
bbbb
cccc
我使用的脚本如下,但它仅适用于三列
set terminal canvas enhanced mousing
set termoption enhanced
set label at 0,0 "Origin"
set title 'mouse over points'
plot 'test.txt' using 1:2:3 with labels hypertext point pt 7 ps var lc rgb "black"
似乎数据文件修饰符使用仅适用于三个条目。 有什么帮助吗?
答案 0 :(得分:0)
很遗憾,您的文字没有被""
包围。不过,您可以使用gnuplot来解决问题,而无需任何外部工具。
您没有指定数据列是由TAB还是由空格分隔。 在下文中,我假设它们被单个空格分隔(如果没有,则需要对代码进行相应的修改)。
程序:
set datafile separator "\n"
word()
提取数字'\n'
代替空格代码:
### Hypertext with columns
reset session
$Data <<EOD
0 0 net0 aaaa bbbb cccc
1 1 net1 zzz
2 2 net2 xxx
3 3 net3 yyy
4 5 net4 ttt 0 0
5 5 net5
EOD
# replace function
# replaces string s1 by string s2 in string s
Replace(s,s1,s2) = (RP_s="", RP_n=1, (sum[RP_i=1:strlen(s)] \
((s[RP_n:RP_n+strlen(s1)-1] eq s1 ? (RP_s=RP_s.s2, RP_n=RP_n+strlen(s1)) : \
(RP_s=RP_s.s[RP_n:RP_n], RP_n=RP_n+1)), 0)), RP_s)
set datafile separator "\n"
GetNumber(n) = real(word(strcol(1),n))
GetText(s) = (s[strstrt(s," ")+1:])[strstrt(s[strstrt(s," ")+1:]," ")+1:]
TextToColumn(s) = Replace(GetText(s),' ','\n')
plot $Data u (GetNumber(1)):(GetNumber(2)):(TextToColumn(strcol(1))) w labels hypertext \
point pt 7 ps 3 lc rgb "red" notitle
### end of code
结果: