例如,我想绘制一个图表,其邻接矩阵是[0,1,0;1,0,1;0,1,0]
。我首先绘制三个标记为 的点p1,p2,p3
,然后链接这些点p1,p2
,p2,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}
现在您说您的顶点将手动指示,所以这就是我所处理的。我还假设它们被命名为p1
、p2
等等。这可以推广到任何大小的邻接矩阵,只要没有循环和多重边。在这种情况下,这是您得到的结果: