Python - Graphviz заставляет ранг быть как минимум таким же

Что я делаю

Я делаю дерево курсов в graphviz. Каждый курс является узлом, а предпосылки и сопутствующие элементы обозначаются как ребра между узлами.

Что работает

Макет неплохо справляется с размещением курсов ниже их предварительных требований.

Что не работает

Я поставил constraint='false' на сопутствующие товары. Однако я хочу, чтобы сопутствующие элементы были по крайней мере в одном и том же ранге друг с другом (то есть сопутствующие элементы должны указывать либо в сторону, либо вниз).

Код

for course in data['CPEN']['courses']:
    cpen.node(course['id'])

for course in data['CPEN']['courses']:
    for pre in course['prerequisites']:
        cpen.edge(pre, course['id'], color='Black')
    for co in course['corequisites']:
        cpen.edge(co, course['id'], color='Blue', constraint='false')

cpen.render(f'test-output/cpen_{time.time()}.gv', view=True)

Текущий выход

введите здесь описание изображения

Математика 101 как дополнение к Математике 152, поэтому они должны быть по крайней мере в одном и том же ранге (не обязательно в одном и том же ранге). Однако стрелка указывает вверх, потому что ребро не используется при ранжировании из-за отсутствия ограничений.

Вопросы

Как сделать узел того же или более высокого ранга, чем другой узел

Как установить числовой ранг узла? (Как сделать так, чтобы курс второго года был как минимум 3-го ранга?)


person alexdriedger    schedule 16.10.2018    source источник