Ice*_*eny 5 matlab graph colors
我刚开始学习硕士论文,而且我对matlab的能力/理解已经遇到了麻烦.
问题是,我在行星/月球表面上有一条轨迹(a .mat与时间和坐标.然后我有一些.mat随着时间和当时的测量.
我可以将它绘制为散射()中的彩色编码轨迹(使用测量和坐标).这非常好用.
但是我的问题是我需要更复杂的东西.我现在需要采用轨迹而不是对其进行颜色编码,我应该将测量的图形(值)(对于每个点给出)添加到轨迹(其不总是直线).我会添加一些草图来解释我想要的东西.红色箭头显示我要添加到我的情节中的内容,绿色显示我拥有的内容.

您可以随时自行转换数据:(使用与@Shai相同的表示法)
x = 0:0.1:10;
y = x;
m = 10*sin(x);
Run Code Online (Sandbox Code Playgroud)
所以你需要的是每个数据点上曲线的法线向量:
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);
Run Code Online (Sandbox Code Playgroud)
将该向量与measurement(m)相乘,用数据点坐标对其进行偏移,您就完成了:
mx = x + curve_norm(1,:).*m;
my = y + curve_norm(2,:).*m;
Run Code Online (Sandbox Code Playgroud)
用它来绘制:
figure; hold on
axis equal;
scatter(x,y,[],m);
plot(mx,my)
Run Code Online (Sandbox Code Playgroud)

这正是你想要的.这个例子只有一条直线作为坐标,但这段代码可以很好地处理任何曲线:
x=0:0.1:10;y=x.^2;m=sin(x);
Run Code Online (Sandbox Code Playgroud)

t=0:pi/50:2*pi;x=5*cos(t);y=5*sin(t);m=sin(5*t);
Run Code Online (Sandbox Code Playgroud)

如果我正确理解您的问题,您需要的是以某个角度围绕原点旋转实际数据.这很简单,因为您只需要将坐标乘以旋转矩阵.然后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')
Run Code Online (Sandbox Code Playgroud)
现在,让我们旋转点(由的值指定的x和y)周围(0,0)在45°角:
P = [x(:) * sqrt(2), y(:) * 100] * [1, 1; -1, 1] / sqrt(2);
Run Code Online (Sandbox Code Playgroud)
然后将它们绘制在散点图之上:
hold on
axis square
plot(P(:, 1), P(:, 2))
Run Code Online (Sandbox Code Playgroud)
请注意,为了可视化目的,此处已完成其他操作:
sqrt(2))到适当的长度.这是你应该得到的:

| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |