簡體   English   中英

Graphviz/Python:單個節點生成后重新着色

[英]Graphviz/Python: Recoloring a single node after it has been generated

我開始熟悉 Python 2.7 中的 graphviz。 是否可以在繪制后更改單個節點的屬性?

例如

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

q

簡單圖形的輸出

是否可以在事后更改節點“b”的顏色? 我知道我可以在生成時設置它

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

但是,我希望能夠在生成后更改它。

此鏈接為 Networkx 和 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。

我還閱讀了http://graphviz.org/content/attrs 上的 graphviz 文檔,但我的實驗都沒有奏效。 我確定它很簡單,但我很想念它......

--- 俱樂部里的老家伙

我已經通讀了 API 文檔,並且認為在構建后無法編輯節點。

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

一種方法是直接編輯圖形對象。

>>> from graphviztest import *
>>> import json
>>> dot = Digraph(comment='My graph', format='png')
>>> dot.node('A', 'hurr')
>>> dot.node('B', 'durr')
>>> dot.edge('A','B')
>>> print dot
// My graph
digraph {
    A [label=hurr]
    B [label=durr]
    A -> B
}
>>> print json.dumps(dot.__dict__, indent=2)
{
  "comment": "My graph", 
  "_encoding": "utf-8", 
  "name": null, 
  "edge_attr": {}, 
  "_format": "png", 
  "body": [
    "\tA [label=hurr]", 
    "\tB [label=durr]", 
    "\tA -> B"
  ], 
  "filename": "Digraph.gv", 
  "graph_attr": {}, 
  "strict": false, 
  "node_attr": {}
}
>>> dot.body[0] = '\tA [label=derp]'
>>> dot.body[1] = '\tB [label=blah]'
>>> print dot
// My graph
digraph {
    A [label=derp]
    B [label=blah]
    A -> B
}
>>> 


您還可以將生成的圖形保存在 SVG 中並直接編輯 SVG,使用 CSS 更改給定節點的顏色。 在 SVG 中,生成的節點有 id,可以很容易地改變顏色(筆觸屬性)。

如果將輸出格式設置為dot ,則會計算布局,但不會實際繪制。 然后,您可以使用 Python、sed、awk 或 gvpr ( https://www.graphviz.org/pdf/gvpr.1.pdf ) 修改該(增強的)Graphviz 文件以修改顏色和/或其他屬性。
然后使用此命令繪制圖形: neato -n2 -Tpng myfile.dot >myfile.png
有關延遲繪圖的更多信息,請參見此處: https : //www.graphviz.org/faq/#FaqDotWithCoordsor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM