绘制具有类似于其他一些图的顶点定位的图

Plot graph with vertex positioning similar to some other graph

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

我尝试使用字典作为位置,但是,由于我正在绘制具有 n 个顶点的多个位置,这仅适用于特定情况。

我找到了解决 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]

结果(也将它们绘制在一起):

在写这篇文章时,我认为有 'cooler' 种方法可以做到这一点,但这很有效。

对于您的特定用例,我认为有一个很好的方法 .complement() 可以保留它。

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

但是,一般来说,您可能希望在相同位置绘制另一张图,并且

using a dictionary

确实是您想在这里做的。一个更简单的例子是你的第一个例子,但我调整了新图,使其不再是互补图。

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)])