我刚开始学习硕士论文,而且我对matlab的能力/理解已经遇到了麻烦。
问题是,我在行星/月球的表面上有一条轨迹(a .mat与时间和坐标。然后我有一些.mat随着时间和当时的测量。
我可以将它绘制为散射()中的彩色编码轨迹(使用测量和坐标)。这非常好用。
然而我的问题是我需要更复杂的东西。 我现在需要采用轨迹而不是对其进行颜色编码,我应该将测量的图形(值)(对于每个点给出)添加到轨迹(其不总是直线)。我会添加一些草图来解释我想要的东西。红色箭头显示我要添加到我的情节中的内容,绿色显示我的内容。
答案 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)
这正是你想要的。这个例子只有一条直线作为坐标,但是这段代码可以很好地处理任何曲线:
x=0:0.1:10;y=x.^2;m=sin(x);
t=0:pi/50:2*pi;x=5*cos(t);y=5*sin(t);m=sin(5*t);
答案 1 :(得分:5)
如果我正确理解您的问题,您需要的是以特定角度围绕原点旋转实际数据。这非常简单,因为您只需要将坐标乘以rotation matrix。然后,您可以使用hold on
和plot
使用旋转的点覆盖您的绘图,如评论中所示。
首先,让我们生成一些类似于你的数据并创建一个散点图:
% # 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)旋转点(由x
和y
的值指定):
P = [x(:) * sqrt(2), y(:) * 100] * [1, 1; -1, 1] / sqrt(2);
然后将它们绘制在散点图之上:
hold on
axis square
plot(P(:, 1), P(:, 2))
请注意,此处已完成其他操作以实现可视化目的:
sqrt(2)
)到适当的长度。这是你应该得到的:
答案 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。
祝你的论文好运。