绘制顶点位置与其他图形相似的图形

时间:2019-04-23 17:40:21

标签: plot graph sage

我正在尝试绘制一些图形,它是互补的,在绘制顶点时,我希望这些顶点位于同一位置。例如,当绘制具有4个顶点的循环图时: 4 vertices cycle graph
我希望能够在顶点处于相同位置的同时绘制出互补的图形(边1-3和0-2边)。相反,当绘制它是互补的时,我得到了: 4 vertices complementary graph

我尝试对位置使用字典,但是由于我要绘制多个顶点为 n 的顶点,所以这仅适用于特定情况。

2 个答案:

答案 0 :(得分:1)

对于您的特定用例,我认为有一个不错的方法.complement()可以保留这一点。

sage: H = graphs.CycleGraph(6)                        
sage: graphics_array([H.plot(),H.complement().plot()])

6 Cycle graph and its complement

但是,通常来说,您可能希望在同一位置绘制另一个图,并且

  

使用字典

确实是您想要在这里执行的操作。一个简单的示例是您的第一个示例,但是我对新图形进行了调整,以使其不再是一个补充。

sage: G = graphs.CycleGraph(4)
sage: pos_dict = G.get_pos()
sage: pos_dict
{0: (0.0, 1.0), 1: (-1.0, 0.0), 2: (0.0, -1.0), 3: (1.0, 0.0)}

这是相关字典,是位置字典。现在,我制作了新图,并尝试与另一个图一起绘制。

sage: G1 = Graph({1: [3,2], 2: [0]})
sage: graphics_array([G.plot(),G1.plot(pos=pos_dict)])

two more graphs

答案 1 :(得分:0)

我找到了 n 顶点问题的可行解决方案。这是代码:

n = 6

# Don't modify
posi = {}
r = 1

G = Graph()
F = Graph()

for i in [0..(n-1)]:
    for j in [0..(n-1)]:
        if i==(j+1)%n or j==(i+1)%n : 
            G.add_edge( (i ,j) )
F = G.complement()

for i in [0..(n-1)]:
    if n % 2 != 0 and i == 0:
        x=0.5
        y=i
    else:
        if i < n/2:
            x=-0.15 if i%2 !=0 else 0.15 #Avoid consecutive vertices to be in-line
            y=i
        else:
            x=0.85 if i%2 !=0 else 1.15  #Avoid consecutive vertices to be in-line
            y=i-r
            r = r+2
    posi[i] = [x, y]

结果(还将它们绘制在一起):
G and !G

在撰写本文时,我发现有“更酷”的方法可以做到这一点,但是效果很好。