我試圖生成圖的子圖的圖像,其中節點應出現在這兩個圖的相同位置。pos參數爲networkx.draw()不起作用
基於documentation for networkx.draw the "pos" argument的draw函數接受一個字典,它指定了節點的位置。我看幾個例子,人們使用類似此模式的pos參數:
positions = networkx.spring_layout(GraphObject)
networkx.draw(GraphObject, positions)
然而,當我嘗試這個我發現的位置顯然忽視 - 或者至少當我畫圖,記錄的位置其節點,然後使用該字典作爲繪製子圖的pos參數,相應的節點不會繪製在相同的位置。
這是一個簡單的重現器,演示了這個問題。我認爲這段代碼應該做的是創建兩個圖形「g」和「h」的兩個.png文件。節點「c」和「d」應該在「h」的圖形中的位置與它們在「g」中的位置相同 - 但是它們不是。
#!/usr/bin/python
import matplotlib.pyplot as plt
import networkx as nx
import pylab
g = nx.Graph()
g.add_node('a')
g.add_node('b')
g.add_node('c')
g.add_node('d')
g.add_edge('a', 'b')
g.add_edge('c', 'd')
h = nx.Graph()
h.add_node('c')
h.add_node('d')
# Define the positions of a, b, c, d
positions = nx.spring_layout(g)
# Produce image of graph g with a, b, c, d and some edges.
nx.draw(g, positions)
plt.savefig("g.png")
# Clear the figure.
plt.clf()
# Produce image of graph h with two nodes c and d which should be in
# the same positions of those of graph g's nodes c and d.
nx.draw(h, positions)
plt.savefig("h.png")
任何人都可以請建議我做錯了什麼,或者如何生成子圖的圖像,其中節點是在同一位置爲全圖的?
謝謝你看看 - 但你真的測試t他上面的代碼,看看它是否將節點c和d放在兩個地塊的同一地點?當我運行你的代碼時,我有兩個問題 - 第一,如果我不放回plt.savefig行,則不會輸出或顯示任何內容,也不會顯示在屏幕上或其他地方。 如果我放回plt.savefig行,節點顯示在不同的位置。 – deadcode
我刪除了'savefig'這幾行,因爲當人們發佈在我的系統上有副作用的代碼時,它確實令人討厭。你的'matplotlibrc'中有'tight_boundingbox = True'嗎? – tacaswell
我使用的安裝默認matplotlibrc沒有爲tight_boundingbox設置任何內容,所以如果tight_boundingbox = True是默認值,那麼是嗎?我懷疑這樣的事情是讓我感覺到的。我發現節點被放置在相同的座標處,但邊界框似乎沒有相同的大小。 – deadcode