使用d3js在python中创建交互式网络
d3graph的Python项目详细描述
交互式力引导网络生成器(d3graph)
Star it if you like it!
d3graph是一个python包,它简化了使用python在d3javascript中创建interactive和独立网络的任务。 对于这个软件包,我的灵感来自于互联网上展示的各种各样的例子。但是所有这些例子都是纯粹基于javascript的,没有任何简单的python包来生成网络。因此,我决定创建一个基于python中的输入邻接矩阵自动创建d3jsjavascript和html代码的包!万岁!在
这个包提供了创建一个基于d3javascript的交互式独立网络的功能。D3graph只需要pandas数据帧形式的邻接矩阵。每个列和索引名称表示一个节点,而矩阵中的值>0表示一条边。节点链接是从行到列构建的。从行到列构建边只在定向情况下重要。网络节点和边缘可以根据用户定义的参数在权重、颜色等方面进行调整。在
目录
安装
d3graph与python3.6+兼容,可以在Linux、macosx和Windows上运行。Note:d3graph要求networkx为v2或更高版本。 它是在Apache2.0许可下发布的。安装d3graph有两种方法:
- 从PyPI安装d3graph(推荐):
- 从GitHub源安装d3graph:
git clone https://github.com/erdogant/d3graph.git cd d3graph pip install "networkx>=2" python setup.py install
快速入门
为了创建交互式和独立的d3graph,可以使用以下工作流:
- 导入d3graph方法
fromd3graphimportd3graph
- 创建简单的示例数据集,其输入矩阵应如下所示:
+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+||0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|+====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+======+|0|0|1|1|1|1|1|1|1|1|0|1|1|1|1|0|0|0|1|0|1|0|1|0|0|0|0|0|0|0|0|0|1|0|0|+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+|1|1|0|1|1|0|0|0|1|0|0|0|0|0|1|0|0|0|1|0|1|0|1|0|0|0|0|0|0|0|0|1|0|0|0|+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+...+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+|32|1|1|1|0|5|0|0|1|0|0|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+|33|1|0|0|0|0|6|1|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|+----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
G=nx.karate_club_graph()adjmat=nx.adjacency_matrix(G).todense()adjmat=pd.DataFrame(index=range(0,adjmat.shape[0]),data=adjmat,columns=range(0,adjmat.shape[0]))adjmat.iloc[3,4]=5adjmat.iloc[4,5]=6
- 制作d3graph
G_d3=d3graph(adjmat)
输出如下:
在
source=['node A','node F','node B','node B','node B','node A','node C','node Z']target=['node F','node B','node J','node F','node F','node M','node M','node A']weight=[5.56,0.5,0.64,0.23,0.9,3.28,0.5,0.45]# Import libraryfromd3graphimportd3graph,vec2adjmat# Convert to adjacency matrixadjmat=vec2adjmat(source,target,weight=weight)print(adjmat)# target node A node B node F node J node M node C node Z# source # node A 0.00 0.0 5.56 0.00 3.28 0.0 0.0# node B 0.00 0.0 1.13 0.64 0.00 0.0 0.0# node F 0.00 0.5 0.00 0.00 0.00 0.0 0.0# node J 0.00 0.0 0.00 0.00 0.00 0.0 0.0# node M 0.00 0.0 0.00 0.00 0.00 0.0 0.0# node C 0.00 0.0 0.00 0.00 0.50 0.0 0.0# node Z 0.45 0.0 0.00 0.00 0.00 0.0 0.0# Example A: simple interactive networkout=d3graph(adjmat)# Example B: Color nodesout=d3graph(adjmat,node_color=adjmat.columns.values)# Example C: include node sizenode_size=[10,20,10,10,15,10,5]out=d3graph(adjmat,node_color=adjmat.columns.values,node_size=node_size)# Example D: include node-edge-sizeout=d3graph(adjmat,node_color=adjmat.columns.values,node_size=node_size,node_size_edge=node_size[::-1],cmap='Set2')# Example E: include node-edge colorout=d3graph(adjmat,node_color=adjmat.columns.values,node_size=node_size,node_size_edge=node_size[::-1],node_color_edge='#00FFFF')# Example F: Change colormapout=d3graph(adjmat,node_color=adjmat.columns.values,node_size=node_size,node_size_edge=node_size[::-1],node_color_edge='#00FFFF',cmap='Set2')# Example H: Include directed links. Arrows are set from source -> targetout=d3graph(adjmat,node_color=adjmat.columns.values,node_size=node_size,node_size_edge=node_size[::-1],node_color_edge='#00FFFF',cmap='Set2',directed=True)
贡献
- 感谢Oliver Verver帮助修复了d3js(https://github.com/oliver3)中的一些错误。在
- 欢迎各界投稿!在
引文
如果这对你的研究有用,请在你的出版物中引用d3graph。以下是BibTeX条目示例:
@misc{erdogant2019d3graph,title={d3graph},author={Erdogan Taskesen},year={2019},howpublished={\url{https://github.com/erdogant/d3graph}},}
维护人员
- 项目
标签: