如何在gnuplot中绘制树图

如何在gnuplot中绘制树图,gnuplot,Gnuplot,我试图在gnuplot中创建一个树状图,到目前为止,我已经将带有标签的点排列到树状结构中。我想连接节点(点),这样每个节点都将连接到更高级别的节点 gnuplot code: set term png set output "tree.png" set xrange [0:50] set yrange [0:50] plot 'data.txt' using 1:2:3 with points pointtype 7 lt 1 title 'title', \ '' usin

我试图在gnuplot中创建一个树状图,到目前为止,我已经将带有标签的点排列到树状结构中。我想连接节点(点),这样每个节点都将连接到更高级别的节点

gnuplot code:
set term png

set output "tree.png"
set xrange [0:50]
set yrange [0:50]



plot 'data.txt' using 1:2:3 with points  pointtype 7 lt 1 title 'title', \
     '' using 1:2:3 with labels offset 0,char 1

data:

20 35 1 
15 30 1.1
10 25 1.1.1
5 20 1.1.1.1
15 20 1.1.1.2

25 30 1.2
30 25 1.2.1
25 20 1.2.1.1
35 20 1.2.1.2
多谢各位


这很可能需要从外部处理输入数据文件,以便动态生成边列表

如果我正确理解了您的问题,那么输入中的每个节点(点)都与一个“树路径”相关联,它只是一个由点分隔的整数组成的字符串,表示点在图形(树)的每个级别上的位置。现在,如果B的路径比A的路径长1(额外1级),并且A的路径是B的路径的前缀(A是B的父节点),则应连接两个节点A和B

要做到这一点,可以假设输入上的点已经按照您的示例中的层次顺序排列(即,父对象的坐标在其任何子对象之前定义),并按照以下步骤进行操作:

set term png

set output "tree.png"
set xrange [0:50]
set yrange [0:50]

fName = 'data.txt'

parseEdges = sprintf('< gawk '' \
    NF==3{ \
        coords = $1 " " $2; \
        data[$3] = coords; \
        n = split($3, path, "."); \
        if(n == 1) next; \
        prefix=path[1]; \
        for(i=2;i<n;i++){ prefix = prefix "." path[i] } \
        if(prefix in data){ \
            print data[prefix] "\n" coords "\n"; \
        } \
    } \
'' %s', fName);

plot \
    fName using 1:2:3 with points  pointtype 7 lt 1 title 'title', \
    '' using 1:2:3 with labels offset 0,char 1, \
    parseEdges w l
设置术语png
设置输出“tree.png”
设置X范围[0:50]
设置Y范围[0:50]
fName='data.txt'
parseEdges=sprintf(“