11
A
回答
6
下面的這個答案可能不是一個完整的解決方案,但是是一個使用networkx渲染3D圖的工作演示。因此網絡x不能渲染3D圖形。我們將不得不安裝mayavi來實現。
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
from mayavi import mlab
import random
def draw_graph3d(graph, graph_colormap='winter', bgcolor = (1, 1, 1),
node_size=0.03,
edge_color=(0.8, 0.8, 0.8), edge_size=0.002,
text_size=0.008, text_color=(0, 0, 0)):
H=nx.Graph()
# add edges
for node, edges in graph.items():
for edge, val in edges.items():
if val == 1:
H.add_edge(node, edge)
G=nx.convert_node_labels_to_integers(H)
graph_pos=nx.spring_layout(G, dim=3)
# numpy array of x,y,z positions in sorted node order
xyz=np.array([graph_pos[v] for v in sorted(G)])
# scalar colors
scalars=np.array(G.nodes())+5
mlab.figure(1, bgcolor=bgcolor)
mlab.clf()
#----------------------------------------------------------------------------
# the x,y, and z co-ordinates are here
# manipulate them to obtain the desired projection perspective
pts = mlab.points3d(xyz[:,0], xyz[:,1], xyz[:,2],
scalars,
scale_factor=node_size,
scale_mode='none',
colormap=graph_colormap,
resolution=20)
#----------------------------------------------------------------------------
for i, (x, y, z) in enumerate(xyz):
label = mlab.text(x, y, str(i), z=z,
width=text_size, name=str(i), color=text_color)
label.property.shadow = True
pts.mlab_source.dataset.lines = np.array(G.edges())
tube = mlab.pipeline.tube(pts, tube_radius=edge_size)
mlab.pipeline.surface(tube, color=edge_color)
mlab.show() # interactive window
# create tangled hypercube
def make_graph(nodes):
def make_link(graph, i1, i2):
graph[i1][i2] = 1
graph[i2][i1] = 1
n = len(nodes)
if n == 1: return {nodes[0]:{}}
nodes1 = nodes[0:n/2]
nodes2 = nodes[n/2:]
G1 = make_graph(nodes1)
G2 = make_graph(nodes2)
# merge G1 and G2 into a single graph
G = dict(G1.items() + G2.items())
# link G1 and G2
random.shuffle(nodes1)
random.shuffle(nodes2)
for i in range(len(nodes1)):
make_link(G, nodes1[i], nodes2[i])
return G
# graph example
nodes = range(10)
graph = make_graph(nodes)
draw_graph3d(graph)
此代碼已從示例here之一修改。 當你成功實現目標時,請在這種情況下發布代碼。
+0
另請參閱本文檔的第19頁 - http://cs.brown.edu/~rt/gdhandbook/chapters/force-directed.pdf。插圖明顯具有與您的客觀可視化相同的結構,我想這是使用networkx和mayavi呈現的。 – Vikram
相關問題
- 1. 使用Networkx繪製圖形to_agraph()
- 2. 使用Networkx繪製晶格和圖形
- 3. 在Python中繪製Networkx圖
- 4. NetworkX:在圖層中繪製圖形
- 5. 在NetworkX中繪製標籤圖
- 6. 繪製與networkX包圖分區在Python
- 7. Networkx圖形邊緣繪製錯誤
- 8. 使用networkx繪製兩個節點之間的多條邊
- 9. 保存使用networkx/maplotlib繪製到亞馬遜s3的圖像?
- 10. 使用Networkx繪製帶有邊緣的圖形
- 11. networkx繪製圖形不推薦使用的消息
- 12. 使用權重來繪製圖形與NetworkX
- 13. 圖中使用當前節點放置可以繪製networkx嗎?
- 14. 動畫繪製networkx邊緣
- 15. 用NetworkX繪製彩色樹木
- 16. 如何使用html5畫布繪製多級餅圖?
- 17. 是否可以使用NetworkX在給定的圖像上繪製圖形?
- 18. NetworkX - 沒有標籤的繪圖圖形
- 19. 圖例爲networkx繪圖功能
- 20. 繪製Networkx的整數輸出
- 21. 在Networkx(Python)中繪製節點值?
- 22. 繪製多個圖形使用matplotlib
- 23. 如何使用phpGraphlib繪製多線圖
- 24. 使用coreplot繪製多個餅圖
- 25. 使用paintComponent()繪製多個圖像
- 26. 使用iOS圖表繪製多條線
- 27. 使用CorePlot庫繪製多個圖形
- 28. 使用networkx繪製三個人的共同朋友連接
- 29. 使用NetworkX/Matplotlib繪製節點座標位置正確
- 30. 使用NetworkX繪製加權複雜網絡
我注意到了標籤說python,但你有任何其他包或附加?如果你告訴我們你需要使用哪些工具,那麼幫助會容易得多。 – HardcoreBro
我也有pydot,numpy和matplotlib。如果有幫助,我也運行Python 2.7。 – Danny