使用坐标和链接数据创建网络

使用坐标和链接数据创建网络

是否可以使用 TikZ 或任何其他包创建具有节点坐标和链接数据的网络?

节点坐标数据如下:

Node    X        Y
   1    50000   510000
   2    320000  510000
   3    50000   440000
   4    130000  440000
   5    220000  440000
   6    320000  440000
   7    420000  380000
   8    320000  380000
   9    220000  380000
  10    220000  320000
  11    130000  320000
  12    50000   320000
  13    50000   50000
  14    130000  190000
  15    220000  190000
  16    320000  320000
  17    320000  260000
  18    420000  320000
  19    320000  190000
  20    320000  50000
  21    220000  50000
  22    220000  130000
  23    130000  130000
  24    130000  50000

链接数据如下:

fromNode    toNode
1   2
1   3
2   1
2   6
3   1
3   4
3   12
4   3
4   5
4   11
5   4
5   6
5   9
6   2
6   5
6   8
7   8
7   18
8   6
8   7
8   9
8   16
9   5
9   8
9   10
10  9
10  11
10  15
10  16
10  17
11  4
11  10
11  12
11  14
12  3
12  11
12  13
13  12
13  24
14  11
14  15
14  23
15  10
15  14
15  19
15  22
16  8
16  10
16  17
16  18
17  10
17  16
17  19
18  7
18  16
18  20
19  15
19  17
19  20
20  18
20  19
20  21
20  22
21  20
21  22
21  24
22  15
22  20
22  21
22  23
23  14
23  22
23  24
24  13
24  21
24  23

答案1

这是一个混合使用 csvsimple 和 tikz 来生成网络的解决方案。@Schrödinger's cat 的答案效率更高,但它展示了如何使用 csvsimple 功能读取 Tikz 数据文件和绘图功能。

为了绘制图表,我简化了初始数据(删除零)并添加了逗号分隔符。

% !TeX encoding = utf8
% !TeX spellcheck = fr
\documentclass{article}
\usepackage{csvsimple}
\usepackage{tikz}
\usetikzlibrary{calc}


\usepackage{filecontents}
\begin{filecontents*}{data2.csv}
Node,X,Y
1,5,51
2,32,51
3,5,44
4,13,44
5,22,44
6,32,44
7,42,38
8,32,38
9,22,38
10,22,32
11,13,32
12,5,32
13,5,5
14,13,19
15,22,19
16,32,32
17,32,26
18,42,32
19,32,19
20,32,5
21,22,5
22,22,13
23,13,13
24,13,5
\end{filecontents*}


\begin{filecontents*}{fromTo.csv}
fromNode, toNode
1,2
1,3
2,1
2,6
3,1
3,4
3,12
4,3
4,5
4,11
5,4
5,6
5,9
6,2
6,5
6,8
7,8
7,18
8,6
8,7
8,9
8,16
9,5
9,8
9,10
10,9
10,11
10,15
10,16
10,17
11,4
11,10
11,12
11,14
12,3
12,11
12,13
13,12
13,24
14,11
14,15
14,23
15,10
15,14
15,19
15,22
16,8
16,10
16,17
16,18
17,10
17,16
17,19
18,7
18,16
18,20
19,15
19,17
19,20
20,18
20,19
20,21
20,22
21,20
21,22
21,24
22,15
22,20
22,21
22,23
23,14
23,22
23,24
24,13
24,21
24,23
\end{filecontents*}

\begin{document}
\begin{tikzpicture}[scale=0.3]
    \csvreader[head to column names]{data2.csv}{}
    {
    \node[draw,circle](N\Node) at (\X,\Y){\Node}; 
    }
    \csvreader[head to column names]{fromTo.csv}{}
    {
    \draw(N\fromNode) -- (N\toNode);
    }
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

您可以tikz-network在这里使用。

\documentclass[tikz,border=3mm]{standalone}
\usepackage{filecontents}
\begin{filecontents*}{vert.csv}
id, label, x, y
1,,5,51
2,,32,51
3,,5,44
4,,13,44
5,,22,44
6,,32,44
7,,42,38
8,,32,38
9,,22,38
10,,22,32
11,,13,32
12,,5,32
13,,5,5
14,,13,19
15,,22,19
16,,32,32
17,,32,26
18,,42,32
19,,32,19
20,,32,5
21,,22,5
22,,22,13
23,,13,13
24,,13,5
\end{filecontents*}
\begin{filecontents*}{edg.csv}
u,v
1,2
1,3
2,1
2,6
3,1
3,4
3,12
4,3
4,5
4,11
5,4
5,6
5,9
6,2
6,5
6,8
7,8
7,18
8,6
8,7
8,9
8,16
9,5
9,8
9,10
10,9
10,11
10,15
10,16
10,17
11,4
11,10
11,12
11,14
12,3
12,11
12,13
13,12
13,24
14,11
14,15
14,23
15,10
15,14
15,19
15,22
16,8
16,10
16,17
16,18
17,10
17,16
17,19
18,7
18,16
18,20
19,15
19,17
19,20
20,18
20,19
20,21
20,22
21,20
21,22
21,24
22,15
22,20
22,21
22,23
23,14
23,22
23,24
24,13
24,21
24,23
\end{filecontents*}

\usepackage{tikz-network}
\begin{document}
\begin{tikzpicture}[scale=0.2]
\SetVertexStyle[MinSize=0.2cm]
\Vertices{vert.csv}
\Edges{edg.csv}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容