标签: graph-visualization

如何最小化(二进制)搜索树的视觉宽度?

介绍

我正在构建一个HTML5 Web应用程序,它从给定的数字列表中创建二叉搜索树的可视化表示.

目前,我有一个算法,根据树的最大深度(这是一个基数为0的值)计算每行节点之间的视觉间距:

offset = 50
offset *= pow(2, maxDepth - currentDepth)
Run Code Online (Sandbox Code Playgroud)

从这里开始,使用该偏移量和其父节点的x位置确定节点的位置.

该算法运行良好,因为它始终能够适应任何深度的最宽树.然而,这也使得树有时不必要地宽.

例子

树枝向左(太宽):

树枝向左分支http://f.cl.ly/items/0c0t0L0L0o411h092G2w/left.png

树枝分叉到两侧(左侧和右侧可以更靠近在一起).

树枝分枝到两侧http://f.cl.ly/items/0r3X1j0w3r1D3v1V1V3b/left-right.png

理想情况下,上面的树应该像金字塔一样,宽度较小,边长,如下图所示:

分支到两侧时的理想树

平衡树(算法最佳的情况):

平衡树http://f.cl.ly/items/203m2j2i3P1F2r2T3X02/balanced.png

履行

属性

我正在使用Backbone.js从Node模型创建节点.每个节点都具有以下属性:

  • parent(父节点)
  • left(左子节点)
  • (右子节点)
  • x(节点的x位置,以像素为单位)
  • y(节点的y位置,以像素为单位)

上面的xy属性是根据节点分支的方向计算的:

if (parent.get('left') === node) {
    x = parentX - offsetX;
    y = parentY + offsetY;
} else if (parent.get('right') === node) {
    x = parentX + offsetX;
    y = parentY + offsetY;
}
Run Code Online (Sandbox Code Playgroud)

此时,xy属性是用于定位节点的确切值(每个节点都位于容器元素内的绝对值).

方法 …

javascript algorithm binary-tree spacing graph-visualization

11
推荐指数
1
解决办法
423
查看次数

Graphviz:能够接受更大文件的在线工具

有没有人知道一个很好的在线网站,用于渲染将采用更大文件的graphviz点文件(例如,200行; 200个节点)?

我正在使用http://graphviz-dev.appspot.com/它到目前为止工作得很好,但是当我跨越大约100行时,似乎会抛出错误.也许别人可以检查一下吗?

graphviz graph-visualization

9
推荐指数
2
解决办法
1万
查看次数

如何在R中展开使用igraph包制作的社区图

试图在推特数据中找到社区.不同单词之间的余弦相似性形成邻接矩阵.然后,我从那个邻接矩阵中创建了图形.图形的可视化是这里的任务:

# Document Term Matrix
dtm = DocumentTermMatrix(tweets)

### adjust threshold here
dtms = removeSparseTerms(dtm, 0.998)
dim(dtms)

# cosine similarity matrix
t = as.matrix(dtms)

# comparing two word feature vectors
#cosine(t[,"yesterday"], t[,"yet"]) 

numWords = dim(t)[2]

# cosine measure between all column vectors of a matrix.
adjMat = cosine(t)

r = 3
for(i in 1:numWords)
{
  highElement  = sort(adjMat[i,], partial=numWords-r)[numWords-r]
  adjMat[i,][adjMat[i,] <  highElement] = 0
}

# build graph from the adjacency matrix
g = graph.adjacency(adjMat, weighted=TRUE, mode="undirected", diag=FALSE)
V(g)$name

# …
Run Code Online (Sandbox Code Playgroud)

r cluster-analysis igraph graph-visualization

9
推荐指数
1
解决办法
2393
查看次数

径向树布局算法

我已经实现了一个树数据结构,其中每个节点都保存(recursivly)一个指向它的子节点的指针列表.

我正在尝试计算用于可视化树的(x,y)坐标.我浏览了这篇文章:

http://gbook.org/projects/RadialTreeGraph.pdf

剪切我无法弄清楚如何超越第一级,即这是我到目前为止所写的:

for (int i = 0; i < GetDepth()+1; i++)
{
    if (i == 0)
    {
        GetNodesInDepth(i).at(0)->SetXRadial(MIDDLE(m_nWidth));
        GetNodesInDepth(i).at(0)->SetYRadial(MIDDLE(m_nHeight));
        continue;
    }

    double dNodesInDepth = GetNodesInDepth(i).size();
    double dAngleSpace = 2 * PI / dNodesInDepth;

    for (int j = 0; j < dNodesInDepth; j++)
    {
        Node * pCurrentNode = GetNodesInDepth(i).at(j);

        pCurrentNode->SetXRadial((SPACING * i) * qCos(j * dAngleSpace) + MIDDLE(m_nWidth));
        pCurrentNode->SetYRadial((SPACING * i) * qSin(j * dAngleSpace) + MIDDLE(m_nHeight));
        pCurrentNode->m_dAngle = dAngleSpace * j;

        if (pCurrentNode->IsParent())
        {
         //..(I'm stuck here)..//  
        } …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm tree graph-visualization

9
推荐指数
1
解决办法
1289
查看次数

是否有任何工具可视化包中不同Python对象之间的关系?

在学习新的Python包时,需要花费大量时间来学习制作包的Python对象.例如,在Pandas库中,有一个名为to_html的方法.它是一个类DataFrame的方法,以及来自类NDFrame的DataFrame子类,它位于模块generic.py等中......

我想知道是否有任何工具可以看到Python对象之间的不同关系,例如继承.

我正在寻找一种工具,您可以在其中键入Python方法(使用它所属的类),该工具可以显示关系 - (类继承的类或其使用的其他模块).

python class graph-visualization

8
推荐指数
0
解决办法
1216
查看次数

Pydot错误:无法识别文件格式"png"

我需要通过pydot构建一个pythonic图解决方案,并尝试运行一个简单的代码,如:

import pydot

graph = pydot.Dot(graph_type='graph')
i=1
edge = pydot.Edge("A", "B%d" % i)
graph.add_edge(edge)
graph.write_png('graph.png')
Run Code Online (Sandbox Code Playgroud)

这是为了在png文件上构建一个简单的图形(A-B1).在解决了很多错误配置后,现在我得到了:

Traceback (most recent call last):
  File "/Users/zallaricardo/Documents/Python/test_png.py", line 7, in <module>
    graph.write_png('graph.png')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pydot.py", line 1809, in <lambda>
    lambda path, f=frmt, prog=self.prog : self.write(path, format=f, prog=prog))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pydot.py", line 1911, in write
    dot_fd.write(self.create(prog, format))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pydot.py", line 2023, in create
    status, stderr_output) )
pydot.InvocationException: Program terminated with status: 1. stderr follows: Format: "png" not recognized. Use one of:

logout
Run Code Online (Sandbox Code Playgroud)

到目前为止,找不到我特定环境的直接解决方案.有关如何修复它的任何提示?需要为python 2.7和mac os x 10.9工作. …

python graph graph-visualization python-2.7 pydot

8
推荐指数
1
解决办法
2034
查看次数

如何改善网络图的可视化?

我试图在python中使用networkx将相邻矩阵转换为图形。我的“加权”图大约有8000个节点和14000条边。是否有很棒的布局图或其他软件包,工具可以使我的图变得更漂亮?我希望结果是边缘权重越高,节点越近。这样我就可以分析群集节点。

我已经尝试了networkx文档中提供的所有布局。我也尝试使用gephi,但仍然对我的理想不满意。这是在networkx中的外观。它可以显示所有群集,但是对于患有强烈恐惧症的人来说,这看起来有点可怕:

在此处输入图片说明

这是我用来绘制图形的代码:

G = nx.Graph()
for i in range(10000):
    for j in range(10000):
        if mat[i][j] > 10:
            G.add_edge(a[i], a[j], weight=mat[i][j])
pos = nx.nx_pydot.graphviz_layout(G)
plt.figure(figsize=(8, 8))
plt.axis('off')
nx.draw_networkx(G, pos=pos, with_labels=False, node_size=25, edgecolors='black', edge_color='b')
plt.show()
Run Code Online (Sandbox Code Playgroud)

python social-networking networkx graph-visualization

8
推荐指数
1
解决办法
364
查看次数

生成shell脚本调用树

我已经交了一个项目,包括几十个(可能超过100个,我没有计算)bash脚本.大多数脚本至少调用另一个脚本.我想得到一个调用图的等价物,其中节点是脚本而不是函数.

有没有现成的软件可以做到这一点?

如果没有,是否有人对如何做到这一点有聪明的想法?

我能想出的最佳计划是枚举脚本并检查基本名称是否唯一(它们跨越多个目录).如果有重复的基本名称,则哭,因为脚本路径通常以变量名称保存,因此您可能无法消除歧义.如果它们是唯一的,那么grep脚本中的名称并使用这些结果来构建图形.使用一些工具(建议?)来可视化图形.

建议?

shell scripting graph-visualization

7
推荐指数
1
解决办法
3038
查看次数

Cosmos DB图形的可视化工具

有人知道可视化在Cosmos DB Graph中创建的图形的工具吗?

我正在寻找类似Gephi(https://gephi.org/)或OrientDB或Neo4j使用的工具。

我正在寻找可以“连接”到数据库的东西。Gephi似乎需要导出,然后使用导出的文件。OrientDB和Neo4j的工具将连接到服务器实例并提供查询的图形结果。

顺便说一句,我目前正在使用Azure Cosmos DB模拟器。因此,我需要可以在本地开发网站(本地主机)上运行的工具。

graph-databases graph-visualization azure-cosmosdb

7
推荐指数
1
解决办法
3027
查看次数

如何使用任何工具可视化 HeteroData pytorch 几何图?

您好,可视化 pyg HeteroData 对象的好方法是什么?(定义类似:https://pytorch-geometric.readthedocs.io/en/latest/notes/heterogeneous.html#creating-heterogeneous-gnns

我尝试使用networkx,但我认为它仅限于同构图(可以转换它,但信息量要少得多)。

g = torch_geometric.utils.to_networkx(data.to_homogeneous(), to_undirected=False )
Run Code Online (Sandbox Code Playgroud)

有人尝试用其他 python lib (matplotlib) 或 js (sigma.js/d3.js) 来做到这一点吗?

您可以分享任何文档链接吗?

visualization networkx graph-visualization pytorch-geometric

7
推荐指数
1
解决办法
2510
查看次数