Самый простой способ сделать это - просто предоставить метки вместо индексов для элемента Sankey
:
nodes = ["PhD", "Career Outside Science", "Early Career Researcher", "Research Staff",
"Permanent Research Staff", "Professor", "Non-Academic Research"]
edges = [
(0, 1, 53), (0, 2, 47), (2, 6, 17), (2, 3, 30), (3, 1, 22.5), (3, 4, 3.5), (3, 6, 4.), (4, 5, 0.45)
]
# Replace the indices with the labels
edges = [(nodes[s], nodes[e], v) for s, e, v in edges]
value_dim = hv.Dimension('Percentage', unit='%')
careers = hv.Sankey(edges, ['From', 'To'], vdims=value_dim)
careers.opts(labels='index', tools=['hover'])
Тем не менее, я думаю, что ваше ожидание того, что определение labels
заставит его использовать столбец меток в узлах для извлечения меток наведения края, имеет смысл, и метки могут не быть уникальными, поэтому описанный выше подход в целом неприменим. Я отправлю вопрос в HoloViews.
hSetBuffering
то, что Вы ищете, значение по умолчанию (на Unix, по крайней мере) является буферизацией строки. Используйте его на stdin прежде, чем запустить основной цикл
hSetBuffering hIn NoBuffering
и дополнительно также на выводе обрабатывают, если Вы хотите видеть результаты сразу на выходной стороне. Обратите внимание, однако, что отключение буферизации может вполне решительно уменьшить производительность.
Я - в значительной степени новичок Haskell, но я не забываю сталкиваться с примером недавно обработки познакового входа. hSetBuffering возможно, что Вы ищете?