당신이 당신의 노드와 엣지를 음모 산포도를 사용하고 가정하면, layout
를 통해 shapes
로 triangles을 추가 할 수 있습니다.
다만
0; 0
1; 2
에
3; 4
에 X/Y 좌표로부터 삼각형을 그리는
layout
layout = plotly.graph_objs.Layout(
shapes=[{'type': 'graph',
'path': 'M 0 0 L 1 2 L 3 4 Z'
}]
)
에 path
shapes
키를 추가한다.
아래 코드는 here에서 수정되었으며 임의의 그래프를 생성하고 정확하게 2 개의 가장자리를 가진 모든 노드에 대한 삼각형을 그립니다.
import plotly
import networkx as nx
def scatter_nodes(pos, labels=None, color=None, size=20, opacity=1):
L = len(pos)
trace = plotly.graph_objs.Scatter(x=list(), y=list(), mode='markers', marker=plotly.graph_objs.Marker(size=list()))
for k in range(L):
trace['x'].append(pos[k][0])
trace['y'].append(pos[k][1])
attrib = dict(name='', text=labels , hoverinfo='text', opacity=opacity)
trace = dict(trace, **attrib)
trace['marker']['size']=size
return trace
def scatter_edges(G, pos, line_color=None, line_width=1):
trace = plotly.graph_objs.Scatter(x=list(), y=list(), mode='lines')
for edge in G.edges():
trace['x'] += [pos[edge[0]][0],pos[edge[1]][0], None]
trace['y'] += [pos[edge[0]][1],pos[edge[1]][1], None]
trace['hoverinfo'] = 'none'
trace['line']['width'] = line_width
if line_color:
trace['line']['color'] = line_color
return trace
G = nx.Graph()
n = 13
Nodes = range(n)
G.add_nodes_from(Nodes)
Edges=[(0,7), (0,2), (1,3), (1,4), (1,7), (2,5), (2,8), (3, 4), (3,5), (4,6), (4,8), (5,7), (7,8), (9, 10), (9, 11), (6,10), (10, 11)]
G.add_edges_from(Edges)
axis = dict(showline=False,
zeroline=False,
showgrid=False,
showticklabels=False,
title=''
)
layout = plotly.graph_objs.Layout(
showlegend=False,
xaxis=plotly.graph_objs.XAxis(axis),
yaxis=plotly.graph_objs.YAxis(axis),
)
pos = nx.fruchterman_reingold_layout(G)
labels = [str(k) for k in range(len(pos))]
trace1 = scatter_edges(G, pos)
trace2 = scatter_nodes(pos, labels=labels)
data = plotly.graph_objs.Data([trace1, trace2])
#let's get the triangles
triangles = list()
for i in range(n):
if len(G.neighbors(i)) == 2:
neighbors = G.neighbors(i)
triangles.append(dict(type='path',
path='M {0} {1} L {2} {3} L {4} {5} Z'.format(
pos[i][0],
pos[i][1],
pos[neighbors[0]][0],
pos[neighbors[0]][1],
pos[neighbors[1]][0],
pos[neighbors[1]][1]),
fillcolor='rgba(44, 160, 101, 0.5)',
line=dict(color='rgb(44, 160, 101)')
))
layout.update(shapes=triangles)
fig = plotly.graph_objs.Figure(data=data, layout=layout)
plotly.offline.plot(fig)
은 오 와우,이 중대하다. 정말 고마워. 나는 이것을 어떻게 작동시키는지를 밝혀 내려고 노력해왔다. – krishnab