如何解决在 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,2)
pos = graphviz_layout(G,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,2)
pos = graphviz_layout(G,11)
nx.draw(G,pos)
scalegraph(1.5)
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。