Je suis nouveau à Python. Lors de l'exécution de ces lignes de code, je m'attends à deux chiffres distincts à enregistrer.Matplotlib condense deux chiffres en un en les sauvegardant
La figure no. 1:
#3) Create the graph
N=int(raw_input('Number of nodes (sqrt): '))
G=nx.grid_2d_graph(N,N)
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.draw_networkx(G, pos=pos, labels=labels,with_labels=False, node_size=10)
#Plot the graph
plt.axis('off')
title_string=('Lattice Network')
subtitle_string=(''+str(N)+'x'+str(N)+' = '+str(N*N)+' nodes')
plt.suptitle(title_string, y=0.99, fontsize=17)
plt.title(subtitle_string, fontsize=8)
plt.savefig('100x100_lattice.png', dpi=1000,bbox='tight') #Figure no. 1
plt.close()
Figure no. 2:
#4) Plot the degree distribution
for data_dict in node_degree.values():
x=node_degree.keys()
y=node_degree.values()
from collections import Counter
occ=Counter(y)
for data_dict in occ.values():
plotx=occ.keys()
ploty=occ.values()
Pk=numpy.zeros((len(ploty)))
for i in range(0, len(ploty)):
Pk[i]=numpy.around(ploty[i]/(N*N),3)
plt.scatter(plotx,Pk,color='red', edgecolors='darkred')
plt.show()
plt.xlabel('Node degree k')
plt.ylabel('P(k)')
plt.xlim(0,10,1)
plt.xticks(numpy.arange(0, 11, 1.0))
plt.ylim(0,1)
plt.yticks(numpy.arange(0, 1, 0.1))
title_string=('Degree Distribution')
subtitle_string=('Lattice, '+str(N)+'x'+str(N)+' nodes')
plt.suptitle(title_string, y=0.99, fontsize=17)
plt.title(subtitle_string, fontsize=9)
plt.tick_params(
axis='x', # changes apply to the x-axis
which='both', # both major and minor ticks are affected
bottom='on', # ticks along the bottom edge are off
top='on', # ticks along the top edge are off
labelbottom='on')
plt.savefig('100x100_lattice_Degree_Distrib.png', dpi=1000,bbox='tight') #Figure no. 2
plt.close()
Au lieu de cela, ce que je reçois visuellement est:
Mon problème. L'image à droite (dans le code Figure no. 2
) est correcte. Celui de gauche (Figure no. 1
) est faux, en ce sens qu'il ne devrait montrer que la structure régulière que vous voyez et non les points rouges, qui proviennent évidemment de la deuxième image. Il doit y avoir quelque chose de mal dans mes appels plt.show
, mais je ne trouve pas de réponse. J'apprécie ton aide!
Cela fonctionne. Merci. Je suppose que le message à emporter est: * chaque fois que vous voulez tracer quelque chose dans matplotlib, assurez-vous que vous appelez * 'plt.figure()' * avant toute nouvelle intrigue *. – FaCoffee
un message de prise encore mieux est d'utiliser l'interface orientée objet: 'fig = plt.figure(); ax = fig.add_subplot (111); ax.scatter (...) '. De cette façon, vous savez toujours quels 'Axes' vous tracez sur – tom
ce que @tom dit. vraiment, vous devriez juste éviter d'utiliser 'plt' entièrement sauf pour créer des figures et des axes –