2010-11-27 39 views
9

¿Cómo puedo obtener control sobre la configuración del eje de un diagrama de pyplot? He hecho simplementecambiar la configuración del eje matplotlib

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

    pylab.show() 

y yo conseguir este que es lo que quiero

alt text

pero quiero el eje x sea 0 en lugar de en la parte inferior. ¿Como podría hacerlo?

Respuesta

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

Esto se parece a lo que necesito, junto con el comentario de @ Joe Kington – Falmarri

+0

Puede encontrar una descripción más general sobre el uso de espinas en ese sentido aquí: http://matplotlib.org/examples/pylab_examples/spine_placement_demo .html –

+2

¿Podría explicar por qué 'ax.spines' se usa aquí? AFAIK, todos los métodos 'set_position' o' set_color' son miembros del objeto de clase 'matplotlib.spines.Spine'. Eso es confuso – haccks

10

Para configurar inicio del eje X a 0:

pylab.xlim(xmin=0) 

Para configurar inicio del eje y en 0:

pylab.ylim(ymin=0) 

Ponga uno de estos líneas (o ambas si lo desea) después de la llamada pylab.plot.

1

creo que esto es lo que quiere

alt text

Pero mi código está muy sucio. Tiene que ser ajustado cuidadosamente. ¿Por qué no usa grid directamente?

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

Es mucho, mucho más fácil hacerlo con espinas. Vea este ejemplo: http://matplotlib.sourceforge.net/examples/pylab_examples/spine_placement_demo.html#pylab-examples-spine-placement-demo –

Cuestiones relacionadas