(把事情放在上下文中:我是igraph的Python接口的作者)。我不確定metamagic
包是否適合您。 AttributeCollectorBase
類的唯一目的是允許igraph中的頂點和邊緣抽屜(請參閱igraph.drawing.vertex
和igraph.drawing.edge
包)以精緻和簡潔的方式定義它們可以視爲視覺屬性的頂點和邊屬性(沒有我打字太多)。所以,舉例來說,如果你看看在igraph.drawing.vertex
的DefaultVertexDrawer
類,你可以看到,我通過派生從AttributeCollectorBase
構造VisualVertexBuilder
類,如下所示:
class VisualVertexBuilder(AttributeCollectorBase):
"""Collects some visual properties of a vertex for drawing"""
_kwds_prefix = "vertex_"
color = ("red", self.palette.get)
frame_color = ("black", self.palette.get)
frame_width = 1.0
...
後來,所使用的DefaultVertexDrawer
時在DefaultGraphDrawer
,我簡單構造VisualVertexBuilder
如下:
vertex_builder = vertex_drawer.VisualVertexBuilder(graph.vs, kwds)
其中graph.vs
是圖表(因此頂點構建器可以訪問的頂點屬性)和kwds
i的頂點序列是傳遞給plot()
的一組關鍵字參數。然後,vertex_builder
變量允許我通過書寫類似vertex_builder[i].color
的方式檢索頂點i
的計算的有效視覺屬性;在這裏,VisualVertexBuilder
負責通過查看頂點並檢查它的color
屬性以及查看關鍵字參數並檢查它是否包含來確定有效顏色。
底線是AttributeCollectorBase
類只有在您實現自定義圖形,頂點或邊緣抽屜時纔會對您有用,並且您希望指定您希望將哪些頂點屬性視爲視覺屬性。如果您只想繪製一張圖並從其他數據中導出該特定圖的視覺屬性,那麼AttributeCollectorBase
對您來說沒有用處。舉例來說,如果你想頂點的大小成比例的程度,要做到這一點是可以在本的首選方式:
sizes = rescale(graph.degree(), out_range=(0, 10))
plot(graph, vertex_size=sizes)
或本:
graph.vs["size"] = rescale(graph.degree(), out_range=(0, 10))
plot(g)
如果你有許多視覺上的性能,最好的方法可能是首先將它們收集到字典中,然後將該字典傳遞給plot()
;例如: -
visual_props = dict(
vertex_size = rescale(graph.degree(), out_range=(0, 10)),
edge_width = rescale(graph.es["weight"], out_range=(0, 5), scale=log10)
)
plot(g, **visual_props)
看看在rescale
功能的更多詳細信息的文檔。如果您希望映射一些頂點屬性到頂點的顏色,你仍然可以使用rescale
到屬性映射到0-255的範圍內,那麼他們周圍到最接近的整數,並使用一個調色板打印時:
palette = palettes["red-yellow-green"]
colors = [round(x) for x in rescale(g.degree(), out_range=(0, len(palette)-1))]
plot(g, vertex_color=colors, palette=palette)
所以我誤解了metamagic模塊,可能它不適合我。感謝Tamás的詳細解答,以及「rescale」功能的有用提示! – deeenes