我试着把反面的肋骨做成不同的颜色。但我不能 =( 现在如果你看一下图表,边 AL 和 LA 的颜色相同:
如何使一个方向的反向边缘(例如,蓝色)和相反方向的橙色?而且筋条的厚度还取决于筋条的重量。我想保留直肋骨,它们的颜色和线条也有所不同。
使用networkx、matplotlib.pyplot、matplotlib.patches、python 我的代码:
#Визуальное разделение прямых и обратных ребер
connectionstyle = []
edge_colors=[]
for v,u in G.edges():
if G1.has_edge(v,u):
connectionstyle.append('arc3, rad=0')
edge_colors.append('#000000')
else:
connectionstyle.append('arc3, rad=0.4')
edge_colors.append('#4682B4')
#Выводим основной график
Arrow = mpl.ArrowStyle.CurveB(head_length=0.3, head_width=.4) #стиль стрелки
pos = nx.shell_layout(G) #расположение нодов
fig, ax = plt.subplots(figsize=(8,7))
edges = nx.draw_networkx_edges(G, pos, node_size=200, arrowsize=15, arrowstyle=Arrow, width=width)
#Стиль отображения узлов
for p in pos:
if pos[p][0] < 0:
pos[p][0] -= 0.02
plt.text(pos[p][0],pos[p][1],s=p, bbox=dict(facecolor='#87CEFA', edgecolor='None', alpha=0.5),
horizontalalignment='right', fontsize=11)
else:
pos[p][0] += 0.02
plt.text(pos[p][0],pos[p][1],s=p, bbox=dict(facecolor='#87CEFA', edgecolor='None', alpha=0.5),
horizontalalignment='left', fontsize=11)
#Отображение весов ребер
edge_labels = nx.get_edge_attributes(G2,'weight')
#Задаем параметры отображения линий, т.е. прямых и обратных ребер:
M = G.number_of_edges()
for i in range(M):
edges[i].set_connectionstyle(connectionstyle[i])
edges[i].set_color(edge_colors[i])
edges[i].set_alpha(0.7)
#Выводим текстом инф о прямых ребрах:
xmin, xmax = ax.get_xlim()
ymin, ymax = ax.get_ylim()
s = ' \n'.join([v+'-->'+u+' '+str(w['weight']) for v,u,w in G1.edges.data()])
plt.text(1.4,-0.2, s='Прямые ребра \n\n'+s,
bbox=dict(facecolor='#87CEFA', edgecolor='None', alpha=0.8),
fontsize=11, horizontalalignment='center', color='white')
plt.tight_layout()
plt.axis('off')
plt.savefig('net2.svg')
plt.show()