Gnuplot - 用超文本中的不同线条绘制标签

时间:2015-03-31 12:44:00

标签: plot label gnuplot

拥有以下文本文件

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"

似乎数据文件修饰符使用仅适用于三个条目。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

很遗憾,您的文字没有被""包围。不过,您可以使用gnuplot来解决问题,而无需任何外部工具。

您没有指定数据列是由TAB还是由空格分隔。 在下文中,我假设它们被单个空格分隔(如果没有,则需要对代码进行相应的修改)。

程序:

  1. 通过设置set datafile separator "\n"
  2. 以全行读取数据
  3. word()提取数字
  4. 将其余部分作为标签文字
  5. '\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

结果:

enter image description here