簡體   English   中英

在 networkx/matplotlib.pyplot/graphviz 中縮放子圖?

[英]Scale subplots in networkx/matplotlib.pyplot/graphviz?

我正在繪制一張圖表,但節點與框的邊緣重疊。

是否可以選擇縮小圖形以阻止節點遍歷?

我看到很多關於調整單元格間距的問題,但我想縮小圖表以使其適合單元格。

這是一個簡單的麻煩示例的代碼:

from networkx.drawing.nx_agraph import graphviz_layout
import matplotlib.pyplot as plt
import networkx as nx


plt.figure(1, figsize=(9, 9))

G=nx.complete_multipartite_graph(1,1,1)
        
pos = graphviz_layout(G, prog="neato")  
plt.subplot(9,9,1)
nx.draw(G, pos, node_size=50,  with_labels=False)

G=nx.complete_multipartite_graph(1,1,2)
pos = graphviz_layout(G, prog="neato")  
plt.subplot(9,9,11)
nx.draw(G, pos)

plt.show()

這是給出的輸出

好的,這是 Sparky05 建議的擴展:xlim 和 ylim 是一對我們可以任意設置的數字,所以這里有一些代碼來縮放它們,但保持中點固定,以防它對其他人有用。

from networkx.drawing.nx_agraph import graphviz_layout
import matplotlib.pyplot as plt
import networkx as nx

def scalegraph(sf):  # scale graph by scalefactor = sf, keeping it centred
    plt.axis('off')
    axis = plt.gca()
    xlim=list(axis.get_xlim())
    ylim=list(axis.get_ylim())
    xav=sum(xlim)/2
    dx=(xlim[1]-xlim[0])/2
    yav=sum(ylim)/2
    dy=(ylim[1]-ylim[0])/2
    axis.set_xlim([xav-sf*dx,xav+sf*dx])
    axis.set_ylim([yav-sf*dy,yav+sf*dy])


plt.figure(1, figsize=(9, 9))

G=nx.complete_multipartite_graph(1,1,1)
        
pos = graphviz_layout(G, prog="neato")  
plt.subplot(9,9,1)
nx.draw(G, pos, node_size=50,  with_labels=False)

scalegraph(1.2)

G=nx.complete_multipartite_graph(1,1,2)
pos = graphviz_layout(G, prog="neato")  
plt.subplot(9,9,11)
nx.draw(G, pos)

scalegraph(1.5)

plt.show()

暫無
暫無

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

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