[img]https://i .sstatic.net/WtrgN4wX.png[/img]
Существует три уровня (или момента времени), отмеченных зеленым цветом. Трудность, по-видимому, заключается в том, что пути сливаются (т. е. два потока не встречаются в новом потоке, который в два раза толще).
Я не нашел способа сделать это с помощью сюжетно , санки Matplotlib или пиаллювиал. Может быть, хитрость в том, чтобы сложить фигурки друг на друга? Но тогда как я могу определить, где поток заканчивается вертикально на крайнем правом зеленом уровне? Фигура должна быть симметричной (т. е. поток должен заканчиваться посередине по вертикали).
Вишенкой на торте решения было бы то, если бы я мог влиять на то, где поток заканчивается (например, в точке точки отмечены синим цветом).
Редактировать
Я помог себе с помощью графического подхода (который вы можете попробовать сами здесь, скопировав код там).
Код: Выделить всё
g = gt.Graph(directed=False)
g.add_vertex(23)
g.add_edge_list([[0, 4], [1, 5], [2, 6], [3, 7], [4, 8], [5, 8], [6, 9], [7, 9], [8, 10], [9, 11], [10, 12], [11, 13], [12, 14], [13, 14], [14, 15]])
pos = g.new_vp('vector')
a = np.array([[-4.5, 3], [-4.5, 1], [-4.5, -1], [-4.5, -3], [-3, 3], [-3, 1], [-3, -1], [-3, -3], [-1.5, 1.5], [-1.5, -1.5], [0, 1.5], [0, -1.5], [1.5, 1.5], [1.5, -1.5], [3, 0], [4.5, 0], [-4.5, 3], [-4.5, 1], [-4.5, -1], [-4.5, -3], [0, 1.5], [0, -1.5], [4.5, 0]])
for v in range(23):
pos[v] = a[v]
gt.graph_draw(
g = g,
pos = pos,
#vertex_color = 'black',
vertex_fill_color = 'black',
vertex_size = 33,
vertex_pen_width = 0,
edge_pen_width = 33,
edge_color = 'black'
output_size = (200, 200),
output = 'tree.png'
)

У меня это работает, но было бы неплохо посмотреть, можно ли это сделать в Matplotlib и т. д.
Подробнее здесь: https://stackoverflow.com/questions/784 ... ey-diagram