如何在matlab中绘制第二个图形而不是颜色编码

时间:2012-12-27 11:15:04

标签: matlab graph colors

我刚开始学习硕士论文,而且我对matlab的能力/理解已经遇到了麻烦。

问题是,我在行星/月球的表面上有一条轨迹(a .mat与时间和坐标。然后我有一些.mat随着时间和当时的测量。

我可以将它绘制为散射()中的彩色编码轨迹(使用测量和坐标)。这非常好用。

然而我的问题是我需要更复杂的东西。 我现在需要采用轨迹而不是对其进行颜色编码,我应该将测量的图形(值)(对于每个点给出)添加到轨迹(其不总是直线)。我会添加一些草图来解释我想要的东西。红色箭头显示我要添加到我的情节中的内容,绿色显示我的内容。

enter image description here

3 个答案:

答案 0 :(得分:5)

您可以随时自行转换数据:(使用与@Shai相同的表示法)

x = 0:0.1:10;
y = x;
m = 10*sin(x);

所以你需要的是每个数据点上曲线的法线向量:

dx = diff(x); % backward finite differences for 2:end points
dx = [dx(1) dx]; % forward finite difference for 1th point
dy = diff(y);
dy = [dy(1) dy];
curve_tang = [dx ; dy];
% rotate tangential vectors 90° counterclockwise
curve_norm = [-dy; dx];
% normalize the vectors:
nrm_cn = sqrt(sum(abs(curve_norm).^2,1));
curve_norm = curve_norm ./ repmat(sqrt(sum(abs(curve_norm).^2,1)),2,1);

将该矢量与测量值(m)相乘,用数据点坐标对其进行偏移,然后就完成了:

mx = x + curve_norm(1,:).*m;
my = y + curve_norm(2,:).*m;

用以下方式绘制:

figure; hold on
axis equal;
scatter(x,y,[],m);
plot(mx,my)

straightline_sine

这正是你想要的。这个例子只有一条直线作为坐标,但是这段代码可以很好地处理任何曲线:

x=0:0.1:10;y=x.^2;m=sin(x);

parabole_sine

t=0:pi/50:2*pi;x=5*cos(t);y=5*sin(t);m=sin(5*t);

circle_sine

答案 1 :(得分:5)

如果我正确理解您的问题,您需要的是以特定角度围绕原点旋转实际数据。这非常简单,因为您只需要将坐标乘以rotation matrix。然后,您可以使用hold onplot使用旋转的点覆盖您的绘图,如评论中所示。

实施例

首先,让我们生成一些类似于你的数据并创建一个散点图:

% # Generate some data
t = -20:0.1:20;
idx = (t ~= 0);
y = ones(size(t));
y(idx) = abs(sin(t(idx)) ./ t(idx)) .^ 0.25;

% # Create a scatter plot
x = 1:numel(y);
figure
scatter(x, x, 10, y, 'filled')

现在让我们以45°的角度围绕(0,0)旋转点(由xy的值指定):

P = [x(:) * sqrt(2), y(:) * 100] * [1, 1; -1, 1] / sqrt(2);

然后将它们绘制在散点图之上:

hold on
axis square
plot(P(:, 1), P(:, 2))

请注意,此处已完成其他操作以实现可视化目的:

  1. 最终的x坐标已被拉伸(sqrt(2))到适当的长度。
  2. 最终的y坐标已被放大(按100),因此旋转的图形突出。
  3. 轴已平方以避免扭曲。
  4. 这是你应该得到的:

    enter image description here

答案 2 :(得分:0)

您似乎对3D绘图感兴趣。 如果我正确理解了您的问题,那么您的2D曲线表示为[x(t), y(t)]。 此外,每个点都有一些值m(t)。 因此,我们正在研究3D曲线[x(t) y(t) m(t)]的图。 你可以使用

轻松实现这一目标
plot3( x, y, m ); % assuming x,y, and m are sorted w.r.t t

或者,您可以使用3D版本的分散

scatter3( x, y, m );

选择你的选择。

好的情节BTW。

祝你的论文好运。