[英]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.