Я пытаюсь построить график с igraph на Python, в соответствии со следующим кодом:Край суперпозиция в igraph (Python)
import numpy as np
import igraph as ig
def make_blue(brightness):
brightness = round(255 * brightness)
return [255 - brightness, 255 - brightness, 255]
N = 6
adj_matr = np.random.random((N, N))
weights = sum(adj_matr.tolist(), [])
g = ig.Graph.Weighted_Adjacency(adj_matr.tolist(), mode=ig.ADJ_DIRECTED, attr="weight", loops=True)
g.vs["color"] = "rgb(224,224,224)"
g.es["arrow_size"] = 0.7
for i in range(0, pow(N, 2)):
rgb_color = make_blue(weights[i])
color_string = "rgb(" + str(rgb_color[0]) + "," + str(rgb_color[1]) + "," + str(rgb_color[2]) + ")"
g.es[i]["color"] = color_string
g.es[1]["color"] = "red"
ig.plot(g, "My_Graph.svg", bbox=(700, 700), margin = 100, vertex_label=map(str, np.arange(N)))
Результат показан ниже:
Я хотел бы нанести красную стрелу на синие, так как она частично скрыта. Я попытался с чем-то вроде fig = Plot(); fig.add(g)
, чтобы наложить красную стрелку на другие, но тогда я не знаю, как сохранить весь сюжет в svg-файле (функция fig.save()
, кажется, сохраняет только в формате png).
Вы знаете, как исправить эту проблему? Заранее спасибо за вашу помощь!
Большое спасибо Tamás, ваша помощь всегда очень ценится. На самом деле я пробовал что-то вроде того, что вы сказали, т. Е. Рисуя график дважды (я следил за учебником на веб-странице igraph), но потом у меня были проблемы с сохранением в формате svg. Однако кажется, что с вашим предложением, а именно с помощью target = "test.svg", проблема должна быть исправлена. Еще раз спасибо! – user2983638