2013-02-14 7 views
2

J'ai réussi à produire un nuage de points qui a une échelle de 1: 1 en utilisant la commande plt.axis('equal'), mais la sortie contient trop d'espace blanc sur les côtés. J'ai cherché un moyen de supprimer cet espace blanc, de sorte que la figure est plus rectangulaire, mais je n'ai pas encore réussi. Voici mon code:modifier l'échelle de matplotlib

import matplotlib.pyplot as plt 


E = [892.255, 837.587, 1227.914, 1212.741, 1053.381] 
N = [395.173, 828.072, 662.757, 115.177, 519.491] 
Labels = ['J1', 'J3', 'J5', 'C'] 

plt.scatter(E,N) 
plt.annotate('J1', xy=(E[0] - 15, N[0] + 15)) 
plt.annotate('J3', xy=(E[1] + 10, N[1] + 5)) 
plt.annotate('J5', xy=(E[2] + 10, N[2] + 5)) 
plt.annotate('C', xy=(E[3] + 5, N[3] + 5)) 
plt.annotate('V1', xy=(E[4] + 15, N[4] - 20)) 
plt.annotate('V2', xy=(1015, 810)) 

plt.annotate('102,96', xy=(850, 540), size=8.5) 
plt.annotate('29,99', xy=(965,655), size=8.5) 
plt.annotate('65,13', xy=(1090, 640), size=8.5) 
plt.annotate('119,83', xy=(1180, 500), size=8.5) 
plt.annotate('82,09', xy=(980, 370), size=8.5) 

plt.plot([E[0], E[4]], [N[0], N[4]], color='k', linestyle='-', linewidth=1) 
plt.plot([E[1], E[4]], [N[1], N[4]], color='k', linestyle='-', linewidth=1) 
plt.plot([E[2], E[4]], [N[2], N[4]], color='k', linestyle='-', linewidth=1) 
plt.plot([E[3], E[4]], [N[3], N[4]], color='k', linestyle='-', linewidth=1) 
plt.plot([1011.591064, E[4]], [817.704131, N[4]], color='k', linestyle='--', linewidth=1) 
plt.scatter(E[4],N[4], s=6500,facecolors='none', color='k') 


plt.grid() 
plt.xlabel('E (m)') 
plt.ylabel('N (m)') 
#plt.ylim((100,900)) 
#plt.xlim((800,1250)) 
plt.axis('equal') 
plt.axis([800, 1250, 100, 900]) 
plt.show() 

qui produit:

output

Ce qui est génial, mais il serait préférable que l'axe x va de 800 à 1300. Est-il possible d'y arriver ?

Répondre

4

Je crois que vous voulez juste définir le paramètre "réglable" à au lieu du "datalim" par défaut. Il suffit d'ajouter une ligne similaire à plt.gca().set(adjustable='box') vers la fin de votre code.

En utilisant votre code ci-dessus, ce changement donne:

enter image description here

(I a également modifié les limites de l'axe x à 800-1300 au lieu de 800-1250 pour éviter une partie du texte suspendue au-dessus du bord et les tiques placées automatiquement sont trop denses.)