Vertical lines with text in plot

57 visualizaciones (últimos 30 días)
Sepp
Sepp el 27 de Sept. de 2017
Comentada: Yair Altman el 17 de Oct. de 2017
Hello everybody
I have created a plot in Matlab. Let's assume for simplicity that I have the following plot:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
Now I would like to add vertical lines (going from the bottom of the figure to the top) at positions x = 1, x = 3 and x = 5. Additionally, the vertical lines should have text (next to the line or on top of the line). For example, for the line at x = 1 I would like to have the text "test 1".
How can this be done? This seems to be a pretty tricky thing in Matlab.
  1 comentario
Jan
Jan el 27 de Sept. de 2017
From the bottom of the figure to the top, or from the axes?

Iniciar sesión para comentar.

Respuesta aceptada

Star Strider
Star Strider el 27 de Sept. de 2017
To draw the lines, you need to specify duplicate x-coordinates to match the two-element ylim vectors. Here, the ylim matrix is transposed (the ' operator) so the vertical lines plot correctly.
The text call to label the lines is straightforward. You need to provide a vector of x and y coordinates, and a matching cell array of strings.
Try this:
x = 0:pi/100:2*pi;
y = sin(x);
figure(1)
plot(x,y)
hold on
plot([1 3 5; 1 3 5], [ylim; ylim; ylim]')
hold off
text([1 3 5], 0.7*[1 1 1], {'Test 1', 'Test 2', 'Test 3'})
It’s not ‘tricky’ really. It just requires a bit of experience with the functions, and when necessary, experimentation to see what works.
  3 comentarios
Cedric
Cedric el 28 de Sept. de 2017
yl = ylim() ;
text([1 3 5], yl(2)*0.7*[1 1 1], {'Test 1', 'Test 2', 'Test 3'})
Star Strider
Star Strider el 28 de Sept. de 2017
@Cedric — Thank you! (I was off doing other things for a few minutes.)
@Sepp — My pleasure. The key is to use ylim to scale the y-position of the labels. The advantage is that with ylim (in Cedric’s comment, yl(2) is the upper limit of the y-axis) automatically rescales with changing limits of the y-axis.

Iniciar sesión para comentar.

Más respuestas (1)

Jan
Jan el 27 de Sept. de 2017
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y);
hold('on');
line([1 3 5; 1 3 5], [-10, -10, -10; 10, 10, 10], 'YLimInclude', 'off');
text([1 3 5], [1, 1, 1], {'Test 1', 'Test 2', 'Test 3'}, ...
'VerticalAlignment', 'top')
Disabling 'YLimInclude' let the Y-limits untouched by this object. Then you can even Zoom in the diagram without seeing the end of the line (at least until a certain level). Unfortunately YLimInclude is undocumented, but it works for many years now.
  1 comentario
Yair Altman
Yair Altman el 17 de Oct. de 2017
Here is the unofficial documentation for the undocumented YLimInclude property: http://undocumentedmatlab.com/blog/plot-liminclude-properties

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by