我正在尝试布局一些图表并使用pygraphviz它。我构建图表并执行
graph.layout(prog='dot')
Run Code Online (Sandbox Code Playgroud)
当我执行时print graph,它会输出点格式表示,如下所示:
...
94 [height="0.5", pos="1485,18", width="0.75"];
93 -> 94 [pos="e,1485,36.104 1485,71.697 1485,63.983 1485,54.712 1485,46.112"];
98 [height="0.5", pos="1557,18", width="0.75"];
97 -> 98 [pos="e,1557,36.104 1557,71.697 1557,63.983 1557,54.712 1557,46.112"];
...
Run Code Online (Sandbox Code Playgroud)
对于每个节点,属性的含义非常清楚pos。但这对于边缘意味着什么呢?我相信它可能以某种方式引用三次样条表示,但是如果我想在 matplotlib 中手动绘制边缘,我将如何使用这些点?
谢谢!乌里
我有以下图表
:
如您所见,有两个自然集群.我想找出一种方法将这些聚类分成两个图.
当然,关键的一步是计算正确的分裂.我想插入两个节点n1和n2,将它们连接起来e(n1,n2),然后移动它们,最大限度地减少边缘交叉的数量(当然,将所有节点/边缘精确地固定在它们所在的位置).
谁能在这里提供任何帮助?我不认为graphviz有任何能让我这样做的东西.
pygraphviz 是否允许您将图像渲染到变量?我想通过网页提供动态图像,而无需将图形渲染到磁盘。
我在尝试使用 NetworkX 和 graphviz_layout 绘制具有多个节点的图形时遇到问题。更具体地说,传递给 nx.graphviz_layout 的参数根本没有帮助。附上我使用的代码:
G=some_graph()
import matplotlib.pyplot as plt
plt.figure(figsize=(32,32))
# use graphviz to find radial layout
pos=nx.graphviz_layout(G,prog="dot",
root=1000,
args='-splines=true -nodesep=0.6 -overlap=scalexy'
)
nx.draw(G,pos,
with_labels=True,
alpha=0.5,
node_size=600,
font_size=10
)
plt.savefig("imagenet_layout.png")
Run Code Online (Sandbox Code Playgroud)
无论我如何更改 nx.graphviz_layout 中的“args”,输出图像都是相同的,并且所有节点都相互重叠。有人可以帮我解决这个问题吗?谢谢!
我试图在python的networkx中以graphviz布局绘制一个100节点的多图G,所以到目前为止我进行了两次试验:
试验1 nx.draw_graphviz函数如下,nx.draw_graphviz(G)但是我对图中的所有节点重复了以下错误:
错误:节点1,位置[0.127506302389087,0.3262608552621944],预计两个双打
然后试图找到一个解决方案,我使用试验2 A=nx.to_agraph(G)得到一个pygraphviz图,但当我尝试绘制时,nx.draw_graphviz(A)我得到以下错误:
AttributeError:'AGraph'对象没有属性'number_of_selfloops'
nx.graphviz_layout但它返回了一个由节点键入的位置字典,我不知道如何用它来绘制graphviz布局.
注意我导入了graphviz,pygraphviz和pydot模块,但我不知道哪些是真正需要的,但它仍然不起作用.
是否缺少在graphviz布局中绘制networkx图形的东西?
完整跟踪错误
试验1
Traceback (most recent call last):
File "main.py", line 102, in <module>
d.display_graph(sub_normal,NEUTRAL_RANGE)
File "/home/abdallah/stage/Reputation_system/display.py", line 33, in display_graph
nx.draw_graphviz(G)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pylab.py", line 982, in draw_graphviz
pos = nx.drawing.graphviz_layout(G, prog)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 257, in graphviz_layout
return pydot_layout(G=G,prog=prog,root=root,**kwds)
File "/usr/local/lib/python2.7/dist-packages/networkx-1.10-py2.7.egg/networkx/drawing/nx_pydot.py", line 277, in pydot_layout
D=P.create_dot(prog=prog)
File "/usr/lib/python2.7/dist-packages/pydot.py", line 1802, in <lambda>
lambda f=frmt, prog=self.prog : self.create(format=f, prog=prog))
File …Run Code Online (Sandbox Code Playgroud) 运行这段代码:
import pygraphviz as PG
tree = PG.AGraph(directed=True, strict=False)
tree.add_node(1)
tree.add_node(2)
tree.add_node(3)
tree.add_node(4)
tree.add_node(5)
tree.add_edge(1, 2)
tree.add_edge(1, 3)
tree.add_edge(4, 4)
tree.add_edge(1, 5)
print str(tree)
Run Code Online (Sandbox Code Playgroud)
有以下输出:
digraph {
1 -> 5;
1 -> 3;
1 -> 2;
4 -> 4;
}
Run Code Online (Sandbox Code Playgroud)
这意味着出现的第一条边是 1->5,而不是第一个定义的 1->2。我怎样才能强制执行订单?我想查看创建顺序中的节点和边。
尝试使用 pip 安装 pygraphviz 1.3 时,出现以下错误消息
致命错误 1083 无法打开文件 graphviz/cgraph.h:没有此类文件或目录错误:命令 C:\Users\Appdata\Local\Programs\Common\Microsoft\Visual C++ for python\9.0\VC\Bin\cl.exe 失败状态 2
我已经有了 Microsoft Visual C++。我正在使用 Python27。Pip 工作正常,我已经成功安装了 graphviz-2.38。我也试过这个命令:
pip install --install-option="--include-path=\C:\graphviz-2.38\release\include\graphviz" --install-option="--library-path=\C:\graphviz-2.38\发布\lib\graphviz" pygraphviz
请让我知道如何解决问题。
使用 pygraphviz,我可以添加子图add_subgraph(list_of_nodes, label='cluster_somename')。layout这将在调用时在子图块内创建它。
有没有办法嵌套子图?
我正在使用dot布局,我知道它可以处理和显示嵌套的子簇。但我无法让 pygraphviz 输出嵌套簇。
我无法可视化或编写决策树。我该怎么办呢?
Python版本3.5,Anaconda 3,我什至设置了环境变量
from sklearn import tree
model = tree.DecisionTreeClassifier(criterion='gini')
model=tree.DecisionTreeClassifier()
model.fit(trainData,trainLabel)
model.score(trainData,trainLabel)
predicted= model.predict(testData)
from sklearn.externals.six import StringIO
import pydot
import pydotplus
dot_data = StringIO()
tree.export_graphviz(model, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
print(graph)
graph.write_pdf("C:\\Users\\anagha\\Desktop\\SynehackData\\DATA\\DATA\\graph.pdf")
Run Code Online (Sandbox Code Playgroud)
错误 :
InvocationException: GraphViz's executables not found
Run Code Online (Sandbox Code Playgroud) 我正在寻找在地图上绘制多个子图,每个子图都以一个地理位置(或绘图的一个坐标)为中心。节点本身没有位置(或者它们都属于一个城市),但每个子图对应一个本地情况。
我试图从/sf/answers/2071804661/ 中得到启发,在一个位置上绘制一个分层图,但没有成功
Run Code Online (Sandbox Code Playgroud)# -*- coding: utf-8 -*- import networkx as nx import pygraphviz import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap as Basemap G1 = nx.Graph() G1.add_edge('a', 'b', weight=0.6) G1.add_edge('a', 'c', weight=0.2) G1.add_edge('c', 'd', weight=0.1) G1.add_edge('c', 'e', weight=0.7) G1.add_edge('c', 'f', weight=0.9) G1.add_edge('a', 'd', weight=0.3) G2 = nx.Graph() G2.add_edge('a', 'b', weight=0.9) G2.add_edge('a', 'f', weight=0.5) G2.add_edge('c', 'd', weight=0.1) G2.add_edge('c', 'e', weight=0.4) G2.add_edge('c', 'f', weight=0.2) G2.add_edge('a', 'd', weight=0.1) edges = G.edges() weights = [G[u][v]['weight'] for u,v in edges] # …
pygraphviz ×10
graphviz ×8
python ×8
networkx ×4
c++ ×1
github ×1
graph ×1
graph-theory ×1
matplotlib ×1
pydot ×1
python-3.x ×1