一种转换器,它接受一个网络(cnet,igraph,networkx,pathpy,…)并创建一个tikz网络以平滑地集成到乳胶中。
network2tikz的Python项目详细描述
网络2tikz
<表><广告>这是用于转换网络的python工具network2tikz 可视化到tikz中 (tikz网络) 数字,用于本地包含到乳胶文档中。
network2tikz
与python 3一起工作,并且(当前)支持
以下是python网络模块:
- cnet
- python-igraph
- 网络x
- 路径路径
- 默认节点/边列表
network2tikz
的输出是
在tikz网络中
位于tikz上的库,
它允许可视化和修改
具体需求和出版物。
因为你不仅得到了网络的图像,而且 在乳胶源文件中,您可以轻松地对图形进行后期处理 (例如,添加图纸、文本、方程式等)。
因为一幅画胜过千言万语,所以举个小例子:
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)
(见上文)给出
\documentclass{standalone}\usepackage{tikz-network}\begin{document}\begin{tikzpicture}\clip (0,0) rectangle (6,6); \Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}\Edge[,bend=-8.531](a)(c) \Edge[,bend=-8.531](c)(d) \Edge[,bend=-8.531](d)(b) \Edge[,bend=-8.531](a)(b) \end{tikzpicture}\end{document}
看起来像
调整情节很简单,可以作为 乳胶工作流。 tikz网络手册 包含多个如何使情节看起来更好的示例。
安装
network2tikz
可以从python包索引中获得,因此只需键入
pip install -U network2tikz
安装/更新。
用法
生成、操纵和研究结构、动力学和 你的复杂网络的功能和往常一样 python模块。
而不是默认的绘图函数(例如
igraph.plot()
或networkx.draw()
)调用network2tikz
byplot(G,'mytikz.tex')
将网络可视化存储为tikz文件
mytikz.tex
。使用以下命令加载模块:fromnetwork2tikzimportplot
高级用法: 当然,你总是可以通过操纵 生成的乳胶文件,但为什么不直接在python中执行呢?做 所以,所有可视化选项都可用 在tikz网络中也有 在
network2tikz
中实现。情节的出现可以是 按关键字参数修改(有关详细说明,请 见下文)。my_style={}plot(G,'mytikz.tex',**my_style)
参数遵循中可用的选项 tikz网络库 并在 这个 tikz网络手册
另外,如果您对最终输出更感兴趣, 不仅使用了
.tex
文件plot(G,'mypdf.pdf')
将绘图保存为PDF格式,或
plot(G)
创建时间图直接显示结果, 也就是说,类似于matplotlib函数
show()
。最后,你可以 同时创建一个节点和边列表,它可以被读取并且很容易 修改(在后处理步骤中) 使用tikz网络plot(G,'mycsv.csv')
注意:
< Buff行情>为了编辑这个情节,请确保 安装了tikz网络!
编译图或将
mytikz.tex
的内容添加到 乳胶源代码。使用选项standalone=false
仅使用tikz 图将被保存,然后可以很容易地包含在 乳胶文档通过\input{/path/to/mytikz.tex}
< > >网络:网络对象
要绘制的网络。网络可以是"cnet"、"networkx"、"igraph", "pathpy"对象,或节点列表和边列表的元组。
文件名:文件、字符串或无,可选(默认为无)
要保存的文件或文件名。文件结尾指定 输出。即文件以".tex"结尾 已创建;如果文件以.pdf结尾,则创建pdf;如果文件 以".csv"结尾,生成两个csv文件(filename_nodes.csv 和filename_edges.csv)。如果文件名是字符串的元组,则 第一个条目将用于命名节点列表和第二个条目 对于边列表;如果未定义结束和类型, 已编译并显示临时PDF文件。
键入:str或none,可选(默认为none)
输出文件的类型。如果没有通过文件名定义结尾, 输出文件的类型可以由 选择权。目前支持以下输出类型: "tex"、"pdf"、"csv"和"dat"。
kwds:关键字参数,可选(默认值=无属性)
用于修改绘图外观的属性。 有关详细信息,请参见下文。
节点大小
:节点的大小。默认值为0.6厘米。节点颜色
:节点的颜色。默认为浅蓝色。颜色可以 由通用颜色名或3元组浮点指定 (R、G和B部件的范围为0到255)。节点不透明度
:节点的不透明度。默认值为1。的范围 数字介于0和1之间。其中0表示完全透明的填充 和1 A固体填充。节点标签
:在节点旁边绘制的标签。节点标签位置
:默认情况下,标签位置在 节点的中心。经典的tikz命令可用于更改 标签的位置。相反,使用这样的命令,位置可以是 通过输入一个介于-360和360之间的数字来确定角度。这个 原点(0)是Y轴。正数改变位置计数器 顺时针,负数则顺时针改变。节点标签距离
:节点和标签之间的距离。节点标签颜色
:标签颜色。节点标签大小
:标签的字体大小。节点形状
:顶点的形状。可能有: "圆形"、"矩形"、"三角形"和任何其他tikz形状节点样式
:可以通过 选项样式。这些命令中的大多数可以在"tikz和 PGF手册"。包含命令附加选项(例如阴影= ,则该样式的参数必须介于{}方括号之间。节点层
:可以将节点分配给特定层。node_label_off
:是抑制所有标签的布尔选项。node_label_as_id
:是一个布尔选项,将节点id指定为label。node_math_mode
:是一个布尔选项,用于转换实验室埃尔斯成 不使用$$环境的数学表达式。node_pseudo
:是创建伪节点的布尔选项,其中 将提供节点名称和节点坐标。边宽度
:边的宽度。默认单位为点(pt)。边颜色
:边的颜色。默认为灰色。颜色可以 由通用颜色名或3元组浮点指定 (R、G和B部件的范围为0到255)。边不透明度
:边的不透明度。默认值为1。的范围 数字介于0和1之间。其中0表示完全透明的填充 和1 A固体填充。edge_curved
:是否应弯曲边。正数 对应于沿逆时针方向弯曲的边,负值 数字对应于沿顺时针方向弯曲的边。零 表示直边。边缘标签
:在边缘旁边绘制的标签。边缘标签位置
:默认情况下,标签位于 线中心的两个节点。经典的tikz命令可用于 更改标签的位置。边缘标签距离
:节点之间的标签位置可以是 使用"距离"选项修改。默认情况下,标签居中 两个节点之间。位置表示为 节点之间的长度,例如距离=0.7,标签放置在 顶点i边缘长度的70%。边缘标签颜色
:标签的颜色。边缘标签大小
:标签的字体大小。edge_style
:可以通过 选项样式。这些命令中的大多数可以在"tikz和 PGF手册"。包含命令附加选项(例如阴影= ,则该样式的参数必须介于{}方括号之间。边箭头大小
:边的箭头大小。边箭头宽度
:边上箭头的宽度。边循环大小:修改边的长度。测量值有 与单元一起插入。默认情况下,环路大小为1厘米。
边环路位置
:通过 围绕节点的旋转角度。原点(0)是Y轴。正的 数字逆时针改变回路位置,而负数 数字按顺时针方向更改。edge_loop_shape
:自循环的形状由 角度。可以通过减小或增大参数来更改形状 "循环形状"选项的值。edge_directed
:是一个布尔选项,它将边转换为directed 箭头。如果网络已定义为定向网络,则此选项 不需要,除非关闭一条或多条边的方向。edge_math_mode
是一个布尔选项,它将标签转换为 不使用$$环境的数学表达式。edge_not_in_bg
默认情况下,边缘绘制在背景层上 在tikz的照片上。即在边缘之后创建的对象 也出现在上面。若要关闭此选项,请在背景中选择"边不在" 必须启用。布局
:dict或string,可选(默认值=无) 在二维平面上具有节点位置的字典。这个 dict的键值表示节点id,而 表示坐标的元组(例如n=(x,y))。最初的 布局可以是plac在二维平面上的任意位置编辑。可以定义用于布局的算法,而不是字典 通过字符串值。目前,支持的是:
随机布局,其中节点均匀地随机放置在 单位平方。此算法可以使用关键字"random"启用, "随机"、"随机"或"无"
Fruchterman-Reingold力定向算法。在这个算法中, 节点由钢圈表示,边缘是弹簧 他们。吸引力类似于弹簧力和 斥力类似于电力。基本思想是 通过移动节点和改变 他们之间的力量。此算法可以使用 关键字:"Fruchterman reingold"、"Fruchterman_reingold"、"Fr", "弹簧布局","弹簧布局","fr"
强制
:浮动,可选(默认值=无) 节点间的最佳距离。如果没有,则距离设置为 1/sqrt(n),其中n是节点数。增加此值以移动 节点距离更远。位置
:dict或none可选(默认值为none) 节点作为字典的初始位置,节点作为键和值 作为一个坐标列表或元组。如果没有,则使用随机初始值 位置。已修复
:列表或无,可选(默认为无) 在初始位置保持固定的节点。迭代
:int,可选(默认值=50) 最大迭代次数阈值
:浮动,可选(默认值=1e-4) 节点位置更改中相对错误的阈值。迭代 如果错误低于此阈值,则停止。权重
:字符串或无,可选(默认值=无) 保存用于边的数值的边属性 重量。如果没有,则所有边权重都为1。维度
:int,可选(默认值=2) 布局尺寸。目前,仅支持二维绘图。seed
:int或none,可选(默认值为none) 设置确定性节点布局的随机状态。如果是int,seed
是 随机数生成器使用的种子,如果没有,则为随机种子 使用由numpy创建的随机数生成器。单位
:字符串或字符串元组,可选(默认值=('cm','pt')) 默认情况下,所有大小值都基于cm,所有线宽都是 以磅为单位定义。使用此选项,输入单位可以是 改变。当前支持的是:像素"px",点"pt", 毫米'mm',厘米'cm'。如果一个值输入为 所有输入必须用这个单位来定义。如果一个单位元组 在给定的情况下,大小由第一个条目定义 第二个条目。页边距
:none、int、float或dict,可选(默认值为none) 边距定义画布边框的"空"空间。如果没有 边距已定义,边距将根据最大值计算 节点大小,以避免剪切节点。如果单个int或float是 使用此距离定义所有边距。定义不同的边距 所有大小的字典的大小{'to p':2,'left':1,'bottom':2,'right':.5}
必须使用。画布
:无,int或float元组,可选(默认值=(6,6)) 画布或图形大小定义绘图的大小。输入的值为 一对怒族mber,其中第一个数字是图形的宽度,而 第二个数字是数字的高度。如果选项units
不是 所用尺寸以厘米为单位。默认情况下,画布为6cm x 6cm。保持纵横比
:bool,可选(默认值为true) 定义是否保留当前布局的纵横比。如果false
,将重新缩放布局以完全适应 画布中的可用区域(即移除的边距)。如果true
,则 保持布局的原始纵横比 在画布中居中。独立的
:bool,可选(默认值为true) 如果此选项为真,将创建一个独立的乳胶文件。即 可以从此输出文件编译图。如果standalone为false, 只有tikz环境存储在tex文件中,并且可以导入 在现有的tex文件中。clean
:bool,可选(默认值为true) 编译期间创建的非pdf文件是否应 删除。清除纹理
:bool,可选(默认值为true) 同时删除生成的tex文件。编译器
:str
或无
,可选(默认值=无) 要使用的乳胶编译器的名称。如果没有,cnet将选择 自己安装一个。从latexmk
开始,然后从pdflatex
编译器参数
:列表
或无
,可选(默认值=无) 应传递给乳胶编译器的额外参数。如果这是 无默认为空列表。无提示
:bool,可选(默认值为true) 是否隐藏编译器输出。- []添加多层处理程序
简单示例
为了便于说明,类似于 这个 python-igraph教程 使用。如果您正在使用另一个python网络模块,并且喜欢 按照这个例子,请看一下 这个 提供的示例
创建网络对象并添加一些边。
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)0
添加节点和边缘属性。
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)1
现在已经可以绘制网络。
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)2 nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)3
这将打开一个显示 网络的表示,如下所示 图:
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)4注意:
< Buff行情>而不是命令margins
命令margin
可以
使用。也可以使用
使用。有关详细信息,请参见下表。
在中保留网络的可视表示的属性
与网络本身分离。您可以简单地设置一个python
包含要传递到绘图的关键字参数的字典
然后使用双星号(**
)运算符传递
将属性设置为绘图的样式
:
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)5
节点选项
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)6
边缘选项
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)7
常规选项和绘图命令。
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)8
除了显示网络,我们还可以生成乳胶源
文件,以后可以使用和修改。这是通过添加
以'.tex'
nodes=['a','b','c','d']edges=[('a','b'),('a','c'),('c','d'),('d','b')]gender=['f','m','f','m']colors={'m':'blue','f':'red'}style={}style['node_label']=['Alice','Bob','Claire','Dennis']style['node_color']=[colors[g]forgingender]style['node_opacity']=.5style['edge_curved']=.1fromnetwork2tikzimportplotplot((nodes,edges),'network.tex',**style)9
\documentclass{standalone}\usepackage{tikz-network}\begin{document}\begin{tikzpicture}\clip (0,0) rectangle (6,6); \Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}\Edge[,bend=-8.531](a)(c) \Edge[,bend=-8.531](c)(d) \Edge[,bend=-8.531](d)(b) \Edge[,bend=-8.531](a)(b) \end{tikzpicture}\end{document}0
可以生成节点和边列表,而不是tex文件 也可以与TIKZ网络库一起使用。
\documentclass{standalone}\usepackage{tikz-network}\begin{document}\begin{tikzpicture}\clip (0,0) rectangle (6,6); \Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}\Edge[,bend=-8.531](a)(c) \Edge[,bend=-8.531](c)(d) \Edge[,bend=-8.531](d)(b) \Edge[,bend=-8.531](a)(b) \end{tikzpicture}\end{document}1
节点列表network_nodes.csv
\documentclass{standalone}\usepackage{tikz-network}\begin{document}\begin{tikzpicture}\clip (0,0) rectangle (6,6); \Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}\Edge[,bend=-8.531](a)(c) \Edge[,bend=-8.531](c)(d) \Edge[,bend=-8.531](d)(b) \Edge[,bend=-8.531](a)(b) \end{tikzpicture}\end{document}2
edge列表network\u edges.csv
\documentclass{standalone}\usepackage{tikz-network}\begin{document}\begin{tikzpicture}\clip (0,0) rectangle (6,6); \Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}\Edge[,bend=-8.531](a)(c) \Edge[,bend=-8.531](c)(d) \Edge[,bend=-8.531](d)(b) \Edge[,bend=-8.531](a)(b) \end{tikzpicture}\end{document}3
plot函数的详细信息
\documentclass{standalone}\usepackage{tikz-network}\begin{document}\begin{tikzpicture}\clip (0,0) rectangle (6,6); \Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}\Edge[,bend=-8.531](a)(c) \Edge[,bend=-8.531](c)(d) \Edge[,bend=-8.531](d)(b) \Edge[,bend=-8.531](a)(b) \end{tikzpicture}\end{document}4
参数
节点样式的关键字参数
边缘样式的关键字参数
布局样式的关键字参数
\documentclass{standalone}\usepackage{tikz-network}\begin{document}\begin{tikzpicture}\clip (0,0) rectangle (6,6); \Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}\Edge[,bend=-8.531](a)(c) \Edge[,bend=-8.531](c)(d) \Edge[,bend=-8.531](d)(b) \Edge[,bend=-8.531](a)(b) \end{tikzpicture}\end{document}5
常规选项的关键字参数
关键字命名约定
在样式字典中,可以使用多个关键字来寻址
属性。这些关键字将转换为唯一的关键字,
在剩余代码中使用。这允许保留在
igraph