2009-09-29 31 views
13

Estoy dibujando un gráfico usando la función plot(), pero de forma predeterminada no muestra los ejes.Cómo mostrar los ejes xey en un gráfico MATLAB?

¿Cómo habilitamos mostrar los ejes en x = 0 e y = 0 en el gráfico?

En realidad mi gráfica es algo así como: alt text

y quiero una línea horizontal que corresponde a y = 0. ¿Cómo lo consigo?

+0

@eSKay: Por favor, puede proporcionar un código de ejemplo de cómo se haya realizado su gráfico. plot() debería mostrar los ejes, por lo que sería interesante ver lo que has hecho para que no se muestren. –

+2

¿Tiene http: // stackoverflow.com/questions/1466498/crossing-axis-and-labels-in-matlab ayuda? Si no, ¿cómo difiere lo que desea de lo que se pregunta allí? –

+0

@Richie Cotton xey son matrices. mi código es solo plot (y, x); – Lazer

Respuesta

8

De forma predeterminada, el diagrama muestra mostrando los ejes, a menos que haya modificado algunas configuraciones. Pruebe lo siguiente

hold on; % make sure no new plot window is created on every plot command 
axes(); % produce plot window with axes 
plot(% whatever your plot command is); 
plot([0 10], [0 0], 'k-'); % plot the horizontal line 
+0

@Martijn hola! ejes(); anula mis ejes originales, así que no estoy usando eso. la última línea genera el eje requerido cuando se ejecuta individualmente, pero no se superpone al eje en la gráfica original ni siquiera con la retención; ¿Alguna idea de cuál podría ser el problema? – Lazer

+0

Esto es extraño. Lo hace en mi versión de matlab (7.6.0.324 (R2008a)) (puede recuperar el número de versión con el comando de versión). Si desea colocar el eje x en algún lugar en el centro de la imagen, esto no es posible en mi versión: el eje x está en la parte superior o inferior (puede configurarlo con la propiedad "XAxisLocation") – Martijn

+0

El problema que encontré es que 'hold on;' inicializa un conjunto de ejes, luego el comando 'axes();' crea un segundo sobre el primero, y este segundo se convierte en el actual y no se "sostiene" en". Un simple 'diagrama (...); Espere; plot (...); 'el orden debería funcionar. – gnovice

3

Tal vez grid on será suficiente.

+0

la cuadrícula está bien (¡déjame ver las intersecciones), pero los ejes serían mejores! – Lazer

2

@Martijn el orden de las llamadas a la función está un poco apagado. Tal vez puedas probar:

x=-3:0.1:3; 
y = x.^3; 
plot(x,y), hold on 
plot([-3 3], [0 0], 'k:') 
hold off 
+0

En realidad, el problema fue la llamada 'axes();' que hizo Martijn (vea mi comentario anterior). Si tiene 'espera; diagrama (x, y); plot (...); 'funcionará correctamente. – gnovice

+0

Supongo que tienes razón, es solo que al mantener pulsado antes de trazar algo se abrirá una figura vacía (con los ejes predeterminados) y luego se sobrescribirá con la trama. Por otro lado, llamarlo después de trazar algo tiene más sentido (mantener el gráfico actual) – Amro

+0

@Amro: Es cierto que es más intuitivo tener el comando de retención siguiendo el primer comando de trazado. – gnovice

2

Sé que esto está llegando un poco tarde, pero un colega mío imaginé algo:

figure, plot ((1:10),cos(rand(1,10))-0.75,'*-') 
hold on 
plot ((1:10),zeros(1,10),'k+-') 
text([1:10]-0.09,ones(1,10).*-0.015,[{'0' '1' '2' '3' '4' '5' '6' '7' '8' '9'}]) 
set(gca,'XTick',[], 'XColor',[1 1 1]) 
box off 
+0

Buena idea, lo convertí en una función: http://www.mathworks.com/matlabcentral/fileexchange/54326-axes0-varargin- – Delyle

4

Si desea que los ejes que aparecen más como un punto de mira, en lugar de a lo largo de los bordes, intente axescenter desde Matlab FEX.

EDIT: recién advertido, esto ya se señala en el enlace de arriba de Jitse Nielsen.

+0

esto hace lo que más necesita para su descripción, pero requiere una dependencia adicional. –

5

La solución del pobre es simplemente graficar las líneas x = 0 e y = 0. Puede ajustar el grosor y el color de las líneas para diferenciarlas del gráfico.

+3

esto hace lo que necesita sin una dependencia pero requiere líneas de código: 'hold on; plot ([0 0], ylim, 'k'); hold on; plot (xlim, [0 0], 'k'); 'mi código no dibuja marcas para el eje tho ... –

-1

solución más fácil:

plot([0,0],[0.0], xData, yData);

Esto crea una línea invisible entre los puntos [0,0] a [0,0] y desde Matlab quiere incluir estos puntos Será muestra el eje.

0

Inspirado por @ respuesta de Luisa, me hizo una función, axes0

x = linspace(-2,2,101); 
plot(x,2*x.^3-3*x+1); 
axes0 

Example output for axes0

Usted puede seguir el enlace de arriba para descargar la función y obtener más detalles sobre el uso de

2

Esto debería trabajar en Matlab:

set(gca, 'XAxisLocation', 'origin') 

Las opciones son: inferior, superior, origen.

Para eje Y:

YAxisLocation; left, right, origin 
Cuestiones relacionadas