如何根据邻接矩阵(手动指定坐标)绘制图形?

如何根据邻接矩阵(手动指定坐标)绘制图形?

例如,我想绘制一个图表,其邻接矩阵[0,1,0;1,0,1;0,1,0]。我首先绘制三个标记为 的点p1,p2,p3,然后链接这些点p1,p2p2,p3。对于一般情况,如何根据邻接矩阵(可能存储在 .txt 文件中)链接这些点?

答案1

这是我的解决方案,它使用 Python 将邻接矩阵解析为TikZ可以读取的内容。我使用的是 Mac,因此在声明目录时要考虑到这一点。我展示的步骤只是一个例子,但我认为这比非常抽象地做要好。因此,假设您的主.tex文件位于/Users/Me/Desktop/latex/

步骤1/Users/Me/Desktop/scripts/:创建一个名为的文件,adjmat.py其内容如下:

F = file('/Users/Me/Desktop/latex/adjmat.txt','r')
L = map(lambda x: x.split(';'),F.readlines())[0]
L = [L[0][1:]] + L[1:-1] + [L[-1][:-1]]
F.close
S = ''
for i in range(len(L)):
    tempL = map(lambda x: x.split(','),[L[i]])[0]
    for j in range(i+1,len(tempL)):
        if tempL[j] == '1':
            S += '\\draw (p%g)--(p%g);\n'%(i+1,j+1)
G = file('/Users/Me/Desktop/latex/adjmat-tikz.txt','w')
G.write(S[:-1])
G.close

第2步:编写邻接矩阵以/Users/Me/Desktop/latex/调用adjmat.txt(例如)仅使用以下文本(主要是用 分隔行;和用 分隔单元格,):

[0,1,0;1,0,1;0,1,0]

步骤3:在终端中,运行python /Users/Me/Desktop/scripts/adjmat.py

步骤4:在您的主.tex文件中,具有以下tikzpicture环境:

\begin{tikzpicture}
\node[circle,fill=black,inner sep=1pt] (p1) at (0,0) {};
\node[circle,fill=black,inner sep=1pt] (p2) at (1,0) {};
\node[circle,fill=black,inner sep=1pt] (p3) at (1,1) {};
\input{adjmat-tikz.txt}
\end{tikzpicture}

现在您说您的顶点将手动指示,所以这就是我所处理的。我还假设它们被命名为p1p2等等。这可以推广到任何大小的邻接矩阵,只要没有循环和多重边。在这种情况下,这是您得到的结果:

在此处输入图片描述

相关内容