使用matplotlib

时间:2015-11-09 14:23:27

标签: python matplotlib plot zoom networkx

我正在绘制一个常规网络(1)处于未改变状态,而(2)处于其更改状态,这意味着它的一小部分节点已经失败。< / p>

我用来创建和绘制它们的代码如下。

(1)未经改变的网络:

import networkx as nx
import matplotlib.pyplot as plt
N=100 #Number of nodes per grid side
G=nx.grid_2d_graph(N,N) #Regular grid
pos = dict( (n, n) for n in G.nodes() ) #Dictionary of all positions
labels = dict( ((i, j), i + (N-1-j) * N ) for i, j in G.nodes() )
nx.set_node_attributes(G, 'pos', pos) #Store pos attributes in the nodes
nx.set_node_attributes(G, 'labels', labels) #Store labels attributes in the nodes
nx.draw_networkx(G, pos=nx.get_node_attributes(G, 'pos'),
                 labels=nx.get_node_attributes(G, 'labels'),
                 with_labels=False, node_size=10)
plt.axis('off')
title_string=('Lattice Network') 
subtitle_string=(''+str(N)+'x'+str(N)+' = '+str(N*N)+' nodes | Average degree <k>: '+str(avg_degree_unaltered))
plt.suptitle(title_string, y=0.99, fontsize=17)
plt.title(subtitle_string, fontsize=8)
plt.savefig('100x100_lattice.png', dpi=1000,bbox='tight')
plt.close()
nx.relabel_nodes(G,labels,False)

(2)改变网络:

G2=dict((k, v) for k, v in status_nodes_model.items() if v < 1) #A special dict which holds the nodes that have failed due to a particular interaction
G.remove_nodes_from(G2) #We remove the failed nodes from graph G
nx.draw_networkx(G, pos=nx.get_node_attributes(G, 'pos'),
                labels=nx.get_node_attributes(G, 'labels'),
                 with_labels=False, node_size=10) 
plt.axis('off')
title_string=('Lattice Network, Stage 2') #Refers to step 11
subtitle_string=('Impact & dynamics | Active nodes: '+str(act_nodes_model)+' | Failed nodes: '+str(failed_nodes_haz+failed_nodes_model)+' | Total failure percentage: '+str(numpy.around(100*(failed_nodes_haz+failed_nodes_model)/10000,2))+'%')
plt.suptitle(title_string, y=0.99, fontsize=17)
plt.title(subtitle_string, fontsize=8)
plt.annotate('Event: '+file[6:12], xy=(0.5,0), xycoords=('axes fraction', 'figure fraction'), xytext=(0, 15), textcoords='offset points', size=8, ha='center', va='bottom')
plt.savefig(filelabel+'_100x100_lattice_stage2.png', dpi=1000,bbox='tight')
plt.close() 

注意:由于失败,网络(2)的节点数少于网络(1)。

我的问题:当我使用 matplotlib 绘制两个网络时,我有一个正确的网络显示(1),但不需要的缩放应用于网络图像(2)导致拉伸形状如何避免这种情况并确保两个网络都以相同的比例绘制,即网络(1)?谢谢!

图片: enter image description here

1 个答案:

答案 0 :(得分:2)

只需保存第一个图的限制(在开始图2之前)

xlim = plt.xlim()
ylim = plt.ylim()

并将它们应用于第二个情节

plt.gca().set_xlim(xlim)
plt.gca().set_ylim(ylim)