如何将图形中的边着色为某种颜色
How to color an edge in a graph as a certain color
我想在 Sage 中绘制一个边颜色不同的图
根据他们是否满足特定条件。什么都没有
到目前为止我读过的文档有关于
为图形的特定边着色。
我不知道什么功能可以做到这一点,但我已经设置
代码,我将展示:
for edge in g.edges()
if edge[2] == -1:
edge = ? # not sure how to change color of the edge
Sage 内置了用不同颜色绘制不同边缘的功能!
参见 plot
方法的 edge_color
和 edge_colors
可选参数
table 中的图形绘图选项中列出的图形
"Graph plotting" page of the SageMath reference manual
那里的例子说 "This example shows off the coloring of edges".
另请参阅示例说明
the set_edges
method of graphs.
为了说明一种实现所要求着色的方法,
从 Petersen 图开始并标记边
如果它们连接不同奇偶校验的顶点,则为 1,否则为 -1。
sage: g = graphs.PetersenGraph()
sage: for u, v, c in g.edge_iterator():
....: g.set_edge_label(u, v, (u - v) % 2 - (u - v + 1) % 2)
....:
观察结果:
sage: g.edges()
[(0, 1, 1),
(0, 4, -1),
(0, 5, 1),
(1, 2, 1),
(1, 6, 1),
(2, 3, 1),
(2, 7, 1),
(3, 4, 1),
(3, 8, 1),
(4, 9, 1),
(5, 7, -1),
(5, 8, 1),
(6, 8, -1),
(6, 9, 1),
(7, 9, -1)]
相应地绘制蓝色或红色的边缘:
sage: red_edges = [e for e in g.edge_iterator() if e[2] == -1]
sage: g.plot(edge_color='blue', edge_colors={'red': red_edges})
Launched png viewer for Graphics object consisting of 26 graphics primitives
一个人也可以做到:
sage: blue_edges = [e for e in g.edge_iterator() if e[2] != -1]
sage: red_edges = [e for e in g.edge_iterator() if e[2] == -1]
sage: g.plot(edge_colors={'blue': blue_edges, 'red': red_edges})
Launched png viewer for Graphics object consisting of 26 graphics primitives
此答案的其余部分解释了我们如何手动完成此操作:
为每种边缘颜色创建一个子图,然后将这些子图绘制在一起。
为了说明这一点,从彼得森图开始,给边上色
取决于它们是否位于相同奇偶校验的顶点之间。
sage: g = graphs.PetersenGraph()
sage: a = copy(g) # edges between vertices of different parity
sage: b = copy(g) # edges between vertices of same parity
sage: for u, v, c in g.edge_iterator():
....: if (u - v) % 2:
....: b.delete_edge(u, v)
....: else:
....: a.delete_edge(u, v)
sage: pa = a.plot(axes=False, edge_color='blue')
sage: pb = b.plot(axes=False, edge_color='red')
sage: p = pa + pb
sage: p.show()
Launched png viewer for Graphics object consisting of 37 graphics primitives
保存剧情:
sage: p.save('Petersen_graph_by_parity.png')
原来的问题,用if c == -1
代替
if (u - v) % 2
决定删除b
的边还是a
的边。
此外,Petersen 图带有已经设置的顶点位置,
问题中的图表 g
可能不正确,
在这种情况下,将定义 pa
和 pb
的两行替换为:
sage: pa = a.plot(axes=False, edge_color='blue', save_pos=True)
sage: pb = b.plot(axes=False, edge_color='red', pos=pa.get_pos())
这个答案的灵感来自
Thierry Monteil's answer
类似的问题:
我想在 Sage 中绘制一个边颜色不同的图 根据他们是否满足特定条件。什么都没有 到目前为止我读过的文档有关于 为图形的特定边着色。
我不知道什么功能可以做到这一点,但我已经设置 代码,我将展示:
for edge in g.edges()
if edge[2] == -1:
edge = ? # not sure how to change color of the edge
Sage 内置了用不同颜色绘制不同边缘的功能!
参见 plot
方法的 edge_color
和 edge_colors
可选参数
table 中的图形绘图选项中列出的图形
"Graph plotting" page of the SageMath reference manual
那里的例子说 "This example shows off the coloring of edges".
另请参阅示例说明
the set_edges
method of graphs.
为了说明一种实现所要求着色的方法, 从 Petersen 图开始并标记边 如果它们连接不同奇偶校验的顶点,则为 1,否则为 -1。
sage: g = graphs.PetersenGraph()
sage: for u, v, c in g.edge_iterator():
....: g.set_edge_label(u, v, (u - v) % 2 - (u - v + 1) % 2)
....:
观察结果:
sage: g.edges()
[(0, 1, 1),
(0, 4, -1),
(0, 5, 1),
(1, 2, 1),
(1, 6, 1),
(2, 3, 1),
(2, 7, 1),
(3, 4, 1),
(3, 8, 1),
(4, 9, 1),
(5, 7, -1),
(5, 8, 1),
(6, 8, -1),
(6, 9, 1),
(7, 9, -1)]
相应地绘制蓝色或红色的边缘:
sage: red_edges = [e for e in g.edge_iterator() if e[2] == -1]
sage: g.plot(edge_color='blue', edge_colors={'red': red_edges})
Launched png viewer for Graphics object consisting of 26 graphics primitives
一个人也可以做到:
sage: blue_edges = [e for e in g.edge_iterator() if e[2] != -1]
sage: red_edges = [e for e in g.edge_iterator() if e[2] == -1]
sage: g.plot(edge_colors={'blue': blue_edges, 'red': red_edges})
Launched png viewer for Graphics object consisting of 26 graphics primitives
此答案的其余部分解释了我们如何手动完成此操作: 为每种边缘颜色创建一个子图,然后将这些子图绘制在一起。
为了说明这一点,从彼得森图开始,给边上色 取决于它们是否位于相同奇偶校验的顶点之间。
sage: g = graphs.PetersenGraph()
sage: a = copy(g) # edges between vertices of different parity
sage: b = copy(g) # edges between vertices of same parity
sage: for u, v, c in g.edge_iterator():
....: if (u - v) % 2:
....: b.delete_edge(u, v)
....: else:
....: a.delete_edge(u, v)
sage: pa = a.plot(axes=False, edge_color='blue')
sage: pb = b.plot(axes=False, edge_color='red')
sage: p = pa + pb
sage: p.show()
Launched png viewer for Graphics object consisting of 37 graphics primitives
保存剧情:
sage: p.save('Petersen_graph_by_parity.png')
原来的问题,用if c == -1
代替
if (u - v) % 2
决定删除b
的边还是a
的边。
此外,Petersen 图带有已经设置的顶点位置,
问题中的图表 g
可能不正确,
在这种情况下,将定义 pa
和 pb
的两行替换为:
sage: pa = a.plot(axes=False, edge_color='blue', save_pos=True)
sage: pb = b.plot(axes=False, edge_color='red', pos=pa.get_pos())
这个答案的灵感来自 Thierry Monteil's answer 类似的问题: