我正在构建一个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模型创建节点.每个节点都具有以下属性:
上面的x和y属性是根据节点分支的方向计算的:
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)
此时,x和y属性是用于定位节点的确切值(每个节点都位于容器元素内的绝对值).
javascript algorithm binary-tree spacing graph-visualization
有没有人知道一个很好的在线网站,用于渲染将采用更大文件的graphviz点文件(例如,200行; 200个节点)?
我正在使用http://graphviz-dev.appspot.com/它到目前为止工作得很好,但是当我跨越大约100行时,似乎会抛出错误.也许别人可以检查一下吗?
试图在推特数据中找到社区.不同单词之间的余弦相似性形成邻接矩阵.然后,我从那个邻接矩阵中创建了图形.图形的可视化是这里的任务:
# 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) 我已经实现了一个树数据结构,其中每个节点都保存(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) 在学习新的Python包时,需要花费大量时间来学习制作包的Python对象.例如,在Pandas库中,有一个名为to_html的方法.它是一个类DataFrame的方法,以及来自类NDFrame的DataFrame子类,它位于模块generic.py等中......
我想知道是否有任何工具可以看到Python对象之间的不同关系,例如继承.
我正在寻找一种工具,您可以在其中键入Python方法(使用它所属的类),该工具可以显示关系 - (类继承的类或其使用的其他模块).
我需要通过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中使用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) 我已经交了一个项目,包括几十个(可能超过100个,我没有计算)bash脚本.大多数脚本至少调用另一个脚本.我想得到一个调用图的等价物,其中节点是脚本而不是函数.
有没有现成的软件可以做到这一点?
如果没有,是否有人对如何做到这一点有聪明的想法?
我能想出的最佳计划是枚举脚本并检查基本名称是否唯一(它们跨越多个目录).如果有重复的基本名称,则哭,因为脚本路径通常以变量名称保存,因此您可能无法消除歧义.如果它们是唯一的,那么grep脚本中的名称并使用这些结果来构建图形.使用一些工具(建议?)来可视化图形.
建议?
有人知道可视化在Cosmos DB Graph中创建的图形的工具吗?
我正在寻找类似Gephi(https://gephi.org/)或OrientDB或Neo4j使用的工具。
我正在寻找可以“连接”到数据库的东西。Gephi似乎需要导出,然后使用导出的文件。OrientDB和Neo4j的工具将连接到服务器实例并提供查询的图形结果。
顺便说一句,我目前正在使用Azure Cosmos DB模拟器。因此,我需要可以在本地开发网站(本地主机)上运行的工具。
您好,可视化 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