就R的igraph,沒有設置頂點的標籤和其他文本的自定義字體在圖形繪製的簡單方法:如何在python igraph中使用自定義字體作爲頂點標籤?
plot(G,vertex.label.family="DINPro")
但是我看到,vertex_label_family
參數是不是在蟒蛇的igraph可用。花了一些時間,我找到了一些可以設置標籤字體的解決方法,所以我會在這裏發佈我的解決方案。我想知道,如果有更優雅或更簡單的解決方案。首先,我想呼籲的igraph情節對象的上下文開羅context.select_font_face()
,但遺憾的是在igraph.drawing.graph.DefaultGraphDrawer()
的draw()
函數覆蓋它在每個plot.redraw()
:
lo = graph.layout_fruchterman_reingold()
sf = cairo.PDFSurface("test.pdf",1280,1280)
bx = igraph.drawing.utils.BoundingBox(10, 10, 1260, 1260)
plot = igraph.plot(graph,layout=lo,target=sf,bbox=bx)
plot._ctx.select_font_face("DINPro", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
plot.redraw()
plot.save()
所以這是行不通的。我會發佈一個簡單的解決方案。
你是對的,不幸的是,'sans-serif'字體當前被硬編碼爲'DefaultGraphDrawer'。我想解決這個問題已經有一段時間了,但是「正確地」這樣做意味着將'DefaultGraphDrawer'中的所有標籤繪製代碼移動到'AbstractVertexDrawer'中(因爲恕我直言,這是它在邏輯上屬於的地方),而且我從未真正找到空閒時間。你的解決方法很好,我暫時無法想到任何簡單的事情。讓我知道你是否有興趣整理你的代碼,以便它可以包含在下一個版本中。 –
@Tamás:謝謝您的回覆!是的,將它包含在即將發佈的版本中將會很好。我還有一個想法可以包含在igraph中,我願意談論它,並在可能的情況下做出貢獻。 – deeenes