任何人都可以推荐可以进行交互式图形可视化的Python库吗?
我特别想要像d3.js这样的东西,但是python
理想情况下它也会是3D.
我看过:
Matplotlib
绘图,而那些似乎是2D.我没有看到任何类型的交互性,例如d3.js
提供的交互性,例如拉动节点.一旦这些数字已经转换为数字格式,如何从numpy数组中删除正无穷数?我正在使用一个在内部使用numpy的包,但是当返回某些数组时,某些值将返回为1.79769313486e + 308正无穷大数.
是否有一种优雅而快速的方法来删除这些(在我的情况下我想要'0'),或者在数组中迭代最佳解决方案?
在看了令人印象深刻的性能比较后,我决定尝试使用图形工具.因此,为了进行比较,我编写了代码以使用两个包生成随机树.
图形工具代码:
import numpy as np
import graph_tool.all as gt
# construct an initial graph with two nodes and one link
n = 5000
G = gt.Graph(directed = False)
G.add_edge(0, 1)
for t in range(2, n):
# connect the new vertex to one of the old vertices randomly
G.add_edge(np.random.choice(range(t)), t)
Run Code Online (Sandbox Code Playgroud)
Networkx代码:
import networkx as nx
import numpy as np
n = 5000
# initial graph
G = nx.Graph()
G.add_edge(0, 1)
for t in range(2, n):
G.add_edge(t, np.random.choice(range(t)))
Run Code Online (Sandbox Code Playgroud)
图形工具在我的4核机器上大约需要14秒,而networkx在同一台机器上需要不到2秒!我错过了一些明显的东西吗 …
我应该如何使用python中的图形工具从邻接矩阵中创建图形?假设我们有adj
矩阵作为邻接矩阵.
我现在做的是这样的:
g = graph_tool.Graph(directed = False)
g.add_vertex(len(adj))
edge_weights = g.new_edge_property('double')
for i in range(adj.shape[0]):
for j in range(adj.shape[1]):
if i > j and adj[i,j] != 0:
e = g.add_edge(i, j)
edge_weights[e] = adj[i,j]
Run Code Online (Sandbox Code Playgroud)
但它感觉不对,我们有更好的解决方案吗?
(我想这是一个合适的标签graph-tool
,但是我无法添加它,某些具有足够权限的人可以制作标签?)
我正在使用python graph-tool.要绘制图形,它使用graph_draw
函数.我想明确地向顶点引擎发送顶点位置.事实证明,我可以传递一个名为的属性映射pos
.我试图将其定义为v_pos = g.new_vertex_property("vector<double>")
在那里g
是我的曲线图.我不确定这是否是正确的方法.
您可能会发现一个有用的代码段.
pos = gt.random_layout(g, shape=shape, dim=3)
>>> pos[g.vertex(0)].a
array([ 86.59969709, 1.31435598, 0.64651486])
graph_draw(g, pos=pos, output="graph-draw-random.pdf")
Run Code Online (Sandbox Code Playgroud)
如果我要在(0,2),(0,4)......(0,8)定义我的顶点位置,我该怎么办?
在上面的代码片段中,我可以将dim更改为2.但我不想随机布局.
作为参考,这是我正在使用的这个工具的主页.http://projects.skewed.de/graph-tool/
我正在使用图形工具,我找不到定义边缘权重的方法.如何在图表中添加边缘权重?
另外,我想在使用时graph_draw
,图表将根据重量绘制边距.我怎么能做到这一点?
非常简短,关于minimize_nested_blockmodel_dl
函数的两三个基本问题graph-tool library
.有没有办法找出哪个顶点落在哪个块上?换句话说,从每个块中提取列表,包含其顶点的标签.
分层可视化对于网络理论中的业余爱好者来说相当难以理解,例如,绘制有向边的正方形是否意味着涉及所考虑的两个块之间的下层边缘的主方向?块使用不同的颜色很好地显示,但在概念层面上,哪些类型的图案或边/顶点属性位于顶点的块分类后面?换句话说,当两个顶点在同一个块中时,我可以对它们的共同属性说些什么呢?
我使用Anaconda作为我的主要python发行版(虽然也安装了系统的默认python),因此必须从源代码编译图形工具以使其与Anaconda一起使用.
我正在使用Ubuntu 14.04所以也必须从源代码编译boost以便能够使用graph-tool的全部功能,因为boost-coroutine库目前只编译为静态库(https://bugs.launchpad.net/ ubuntu/+ source/boost1.54/+ bug/1529289).
我已经这样做了,他们都安装了没有任何错误消息,然而,当然后使用from graph_tool.all import *
我得到错误消息导入python中的图形工具ImportError: libboost_iostreams.so.1.61.0: cannot open shared object file: No such file or directory
.
我怎么能解决这个问题/这是由什么引起的?
我正在尝试在Ubuntu 14.04(x64)上为Anaconda Python 3.5安装图形工具,但事实证明这是一个真正的技巧.
我试过这种方法,但遇到了问题:
The following specifications were found to be in conflict:
- graph-tool
Use "conda info <package>" to see the dependencies for each package.
Run Code Online (Sandbox Code Playgroud)
挖掘依赖关系导致了gobject-introspection的死胡同
所以我尝试了另一种方法:
使用conda安装了boost,然后尝试./configure,make和make install graph-tool ...这就是./configure:
===========================
Using python version: 3.5.2
===========================
checking for boostlib >= 1.54.0... yes
checking whether the Boost::Python library is available... yes
checking whether boost_python is the correct library... no
checking whether boost_python-py27 is the correct library... no
checking whether boost_python-py27 is the correct library... (cached) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过graph-tool
库(接近 10^6 - 10^7 个顶点)创建大图,并用顶点名称填充顶点属性或使用名称而不是顶点索引。我有:
名单:
['50', '56', '568']
Run Code Online (Sandbox Code Playgroud)一组边,但不是顶点索引,而是由它们的名称组成:
edge_list = {frozenset({'568', '56'}), frozenset({'56', '50'}), frozenset({'50', '568'})}
Run Code Online (Sandbox Code Playgroud)因为add_edge_list()
如果它们在图中没有这样的顶点,则允许创建顶点。我试图用它来填充一个空图。它工作正常,但是当我尝试按名称获取顶点时,出现错误,提示没有具有此类索引的顶点。
这是我的程序的代码:
['50', '56', '568']
Run Code Online (Sandbox Code Playgroud)
的错误信息print(g.vertex('50'))
:
ValueError: Invalid vertex index: 50
Run Code Online (Sandbox Code Playgroud)
我想创建图表:
edge_list
仅使用;有什么好的方法可以做到这一点吗?
编辑:当前代码:
edge_list = {frozenset({'568', '56'}), frozenset({'56', '50'}), frozenset({'50', '568'})}
Run Code Online (Sandbox Code Playgroud) graph-tool ×10
python ×10
graph ×5
networkx ×2
python-3.x ×2
anaconda ×1
boost ×1
c++ ×1
d3.js ×1
dot ×1
draw ×1
graph-theory ×1
infinity ×1
numpy ×1
ubuntu-14.04 ×1