2017-06-02 33 views
2

我已經熟悉Python 2.7中的graphviz。是否可以在繪製單個節點後更改其屬性?Graphviz/Python:在生成單個節點後重新着色

例如

from graphviz import Digraph 
q = Digraph() 
q.node('a') 
q.node('b') 
q.edge('a','b') 

q 

Output of simple graph

是否有可能改變節點 'B' 的顏色事後?我知道我可以設置在一代時

q.node('b', color = 'blue') 

但是,我想能夠改變它後生成它。

此鏈接Color a particular node in Networkx and Graphviz

建議使用圖形的.node屬性更新字典

G.node[2]['fillcolor']='red' 

依此類推,我試圖

q.node['b']['color'] = 'blue' 

它給出了一個錯誤:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-54-43b05071d09a> in <module>() 
----> 1 q.node['b']['color'] = 'blue' 

TypeError: 'instancemethod' object has no attribute '__getitem__' 

我認爲這可能是因爲我沒有像以前那樣使用networkx。

我也讀過了graphviz文檔http://graphviz.org/content/attrs 但我的實驗都沒有奏效。我敢肯定,這是簡單的事情,但我失蹤了......

---老傢伙在俱樂部

回答

2

我已經通過API文檔閱讀,並且不認爲這是可能的編輯節點在建造之後。

如果您不想使用networkx,則一種解決方法是將圖存儲在您自己的數據結構中,並使用它在您準備好(重新)呈現它時創建graphviz圖。例如,您可以保留所有應爲藍色的節點的名稱列表,然後在構建graphviz圖形時參考該列表。以這種方式將模型與渲染分離也可能導致更容易的維護。

+0

我嘗試了一些使用networkx的實驗 - 它有一些非常好的功能,但我想到的幾件事情似乎比純graphviz更復雜一點。您將節點類別更新爲批處理的想法聽起來像是我最終想要做的一個好方法。我會嘗試這條路線。感謝您的及時回覆。 – OldGuyInTheClub