Что я делаю
Я делаю дерево курсов в 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-го ранга?)