2010-11-27 43 views
9

Comment contrôler les paramètres d'axe d'un tracé de pyplot. Je l'ai simplement faitmodifier les paramètres d'axe matplotlib

pylab.plot(*self.plot_generator(low, high)) 

    pylab.show() 

et je reçois ce qui est ce que je veux

alt text

mais je veux l'axe x soit à 0 au lieu de fond. Comment ferais-je cela?

Répondre

14
# create some data 
x = np.linspace(-np.pi,np.pi,100) 
y = np.cos(2.5*x) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(x,y, mfc='orange', mec='orange', marker='.') 

# using 'spines', new in Matplotlib 1.0 
ax.spines['left'].set_position('zero') 
ax.spines['right'].set_color('none') 
ax.spines['bottom'].set_position('zero') 
ax.spines['top'].set_color('none') 
ax.spines['left'].set_smart_bounds(True) 
ax.spines['bottom'].set_smart_bounds(True) 
ax.xaxis.set_ticks_position('bottom') 
ax.yaxis.set_ticks_position('left') 

ax.axhline(linewidth=2, color='blue') 
ax.axvline(linewidth=2, color='blue') 
show() 

alt text

+0

Cela ressemble à ce que je dois, ainsi que le commentaire de Kington – Falmarri

+0

Vous @ Joe trouverez une description plus générale sur la façon d'utiliser des épines à cet égard ici: http://matplotlib.org/examples/pylab_examples/spine_placement_demo .html –

+2

Pourriez-vous expliquer pourquoi 'ax.spines' est utilisé ici. AFAIK, toutes les méthodes 'set_position' ou' set_color' sont membres de l'objet de classe 'matplotlib.spines.Spine'. C'est confus. – haccks

10

Pour définir début de l'axe x à 0:

pylab.xlim(xmin=0) 

Pour définir début de l'axe y à 0:

pylab.ylim(ymin=0) 

Mettez un de ces lignes (ou les deux si vous le souhaitez) après l'appel pylab.plot.

1

Je pense que c'est ce que vous voulez

alt text

Mais mon code est très sale. Il doit être réglé avec soin. Pourquoi n'utilisez-vous pas grid directement?

import pylab 
import numpy as np 

x = np.arange(20)+300 
y = x - 308 

x1 = x[y>=0] 
x2 = x[y<=0] 
y1 = y[y>=0] 
y2 = y[y<=0] 


fig = pylab.figure() 
fig.subplots_adjust(hspace=0.00001) 
bx = pylab.subplot(212) 
pylab.ylim(-12,0) 
pylab.plot(x2,y2) 
pylab.setp(bx.get_xticklabels(), visible=False) 
ax = pylab.subplot(211,sharex=bx) 
pylab.plot(x1,y1) 
pylab.ylim(0,12) 
pylab.setp(ax.get_xticklabels(), visible=True) 
pylab.show() 
+2

C'est beaucoup, beaucoup plus facile de le faire en utilisant des épines. Voir cet exemple: http://matplotlib.sourceforge.net/examples/pylab_examples/spine_placement_demo.html#pylab-examples-spine-placement-demo –