How to tick the parameter in the plot of a parametric function?

2 visualizaciones (últimos 30 días)
Bernhard
Bernhard el 29 de Jul. de 2022
Respondida: Bernhard el 31 de Jul. de 2022
I have a plot of a parametric function, as in the following simple example:
t = linspace(0, 1, 1000);
x = t.^2;
y = t.^3;
figure
plot(x, y, '-')
axis([0 1 0 1])
axis square
xticks(0:.1:1)
yticks(0:.1:1)
xlabel('x')
ylabel('y')
title('Parametric Plot: x = t^2; y = t^3')
How can I add ticks for the parameter value along the curve, similar to the x- and y-ticks?
Thank you!
Bernhard
  4 comentarios
Bernhard
Bernhard el 29 de Jul. de 2022
I mean something like this (three ticks inserted manually):
Adam Danz
Adam Danz el 29 de Jul. de 2022
Editada: Adam Danz el 29 de Jul. de 2022
Moving my answer to here in support of the other answers added later.
What about using Grid lines?
t = linspace(0, 1, 1000);
x = t.^2;
y = t.^3;
figure
plot(x, y, '-')
axis([0 1 0 1])
axis square
xticks(0:.1:1)
yticks(0:.1:1)
xlabel('x')
ylabel('y')
title('Parametric Plot: x = t^2; y = t^3')
grid on
Or text objects
figure
plot(x, y, '-')
axis([0 1 0 1])
axis square
xticks(0:.1:1)
yticks(0:.1:1)
xlabel('x')
ylabel('y')
title('Parametric Plot: x = t^2; y = t^3')
idx = 800; %for the 500th point
hold on
plot(x(idx),y(idx), 'bo')
text(x(idx), y(idx), sprintf('[%.2f, %.2f]',x(idx),y(idx)), ...
'VerticalAlignment', 'Bottom', 'HorizontalAlignment', 'right')

Iniciar sesión para comentar.

Respuesta aceptada

Voss
Voss el 29 de Jul. de 2022
Editada: Voss el 29 de Jul. de 2022
t = linspace(0, 1, 1000);
x = t.^2;
y = t.^3;
tick_length = 0.04;
t_tick = linspace(0,1,21);
x_tick = t_tick.^2;
y_tick = t_tick.^3;
dxdt_tick = 2.*t_tick;
dydt_tick = 3.*t_tick.^2;
theta_tick = atan2(dydt_tick,dxdt_tick)+pi/2;
xx = x_tick+cos(theta_tick)*tick_length/2.*[-1; 1];
yy = y_tick+sin(theta_tick)*tick_length/2.*[-1; 1];
xx(end+1,:) = NaN;
yy(end+1,:) = NaN;
figure
hold on
line(xx(:),yy(:), ...
'Color','k', ...
'LineWidth',1, ...
'Clipping','off')
plot(x, y, '-')
axis([0 1 0 1])
axis square
xticks(0:.1:1)
yticks(0:.1:1)
xlabel('x')
ylabel('y')
title('Parametric Plot: x = t^2; y = t^3')
  3 comentarios

Iniciar sesión para comentar.

Más respuestas (2)

Les Beckham
Les Beckham el 29 de Jul. de 2022
Try this (or something similar):
% Your original code
t = linspace(0, 1, 1000);
x = t.^2;
y = t.^3;
figure
plot(x, y, '-')
axis([0 1 0 1])
axis square
xticks(0:.1:1)
yticks(0:.1:1)
xlabel('x')
ylabel('y')
title('Parametric Plot: x = t^2; y = t^3')
% New code
tdisp = [0 .3:.1:1]; % times to mark
hold on
plot(tdisp.^2, tdisp.^3, '+') % mark the points
text(tdisp.^2 + .02, tdisp.^3, split(num2str(tdisp))) % add labels

Bernhard
Bernhard el 31 de Jul. de 2022
Thank you @AdamDanz, @Voss, @LesBeckham for your helpful answers.
Frankly speaking, I had hoped for a neat, fully automated algorithm for adding annotated ticks to the curve, but reflecting on your answers, I see now that this would not be feasable for the general case.
Voss' code, providing ticks orthogonal to the curve, gives the prettiest result, but it depends on calculating the derivatives uf x(t) and y(t), which might be not always possible.
So Les Beckham's proposal of adding '+' Markers, and annotating them with a smart use of the "split" function, might be favorable for most of the practical cases.

Categorías

Más información sobre Graphics Object Properties en Help Center y File Exchange.

Productos


Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by