Как нарисовать двухцветный край?

В настоящее время я пытаюсь представить граф с помощью Graphviz, в котором края имеют 2 цвета. В идеале я хотел бы разрезать каждую кромку пополам, по одной половине каждого цвета.

Еще одно ограничение заключается в том, что я должен использовать кодировку RGB, как в color="#4a52ff". Я не могу использовать способ color="black".

Я попытался разделить цветовые метки знаком :, но в результате получил двойной край.

Вот минимальный пример:

import graphviz as gv

color1, color2 = "#3f7f3f", "#ff7f3f"
g = gv.Graph(format="png")
g.node("1", color=color1)
g.node("2", color=color2)
g.edge("1", "2", color="%s:%s" % (color1, color2))
g.render("tmp", view=True)

Я получаю небольшой граф с 2 узлами и 1 ребром, но кажется, что единственное ребро было удвоено, по одной версии каждого цвета. Я бы хотел иметь один оранжевый конец, подключенный к оранжевому узлу, и один зеленый конец, подключенный к зеленому.

Полученный график


person m.raynal    schedule 28.07.2018    source источник


Ответы (2)


Из атрибутов узла, края и графика - цвет page, Graphviz поддерживает раскраску краев, если вы укажете дробь.

Это поддерживает общий случай рисования противоположных кромок, но с использованием параллельных шлицев вместо отдельно проложенных нескольких кромок. Если используется какая-либо дробь, цвета рисуются последовательно, причем каждому цвету дается примерно указанная часть края.

В вашем случае измените следующую строку:

g.edge("1", "2", color="%s:%s" % (color1, color2))

to:

 g.edge("1", "2", color="%s;%f:%s" % (color1, 0.5, color2))

И это выглядит так:

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

person tk421    schedule 10.08.2018

Ближе всего к тому, что вы хотите, я могу добавить промежуточный узел:

graph g
{
mid [shape=point ];
node1 [ color = "#3f7f3f"];
node2 [ color = "#ff7f3f"];
node1 -- mid [ color= "#3f7f3f"];
mid -- node2 [color = "#ff7f3f"];
}

Это дает результат, аналогичный тому, что вы описываете:

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

Теперь я просто использую GraphViz, а вы используете версию python, но ключевым моментом здесь, если вы решите его использовать, является промежуточный узел с другими цветами, доходящими до него.

person TomServo    schedule 29.07.2018