MATLAB - 根据可比较的 z 值绘制不同颜色的线条
Posted
技术标签:
【中文标题】MATLAB - 根据可比较的 z 值绘制不同颜色的线条【英文标题】:MATLAB - Plotting lines in different colours according to comparible z value 【发布时间】:2012-11-27 14:27:30 【问题描述】:我正在使用一些 MATLAB 代码通过视频捕获来跟踪流体解决方案中的粒子。
所有跟踪的粒子都存储在一个单元格数组 (tr
) 中,每个单元格条目都被跟踪到不同的粒子。然后该单元格包含一个N x 11
矩阵,其中每一行包含粒子在该特定帧的参数(位置、大小、对比度等),N 是粒子已被跟踪的视频帧数。
每个单元格的第 1 列包含粒子 x 位置,每个单元格的第 2 列包含粒子 y 位置,每个单元格的第 11 列包含捕获的所有帧的粒子平均速度(忽略所有其他列)。
粒子单元的示例:
现在通常要在我捕获的视频的第一帧上绘制这些轨迹,我使用以下代码:
image = read(mmreader([movie '.avi']), 1); %Loads the first frame of the avi file
figure
imshow(image);
hold on
for i = 1:length(tr) % Or choose which particle you want to show
plot3(tri(:,1),tri(:,2),tri(:,11),'r')
end
但我更愿意像使用上面的代码一样绘制粒子,但粒子轨迹的颜色取决于其平均速度的值(红色 - 快,蓝色 - 慢等)。我想也许最好的方法是将其绘制为 3D 并使用平均速度作为 Z 轴值?但是我在这里仍然不确定如何将颜色添加到绘图并保持相对,以便可以通过它们绘制的颜色来比较不同粒子的速度。
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:我的建议是首先为每个音轨确定您想要的颜色范围。 (例如计算每个轨道的速度)
在此之后,您可以sort
以正确的顺序获取它们。
然后您可以使用colormap
来确保每一行都获得正确的颜色。
【讨论】:
【参考方案2】:您可能想看看 FEX 包cline。
考虑这个例子(2D 曲线,其颜色由其速度决定)
tt = 0:.1:5
x_v = sin(tt);y_v = tt.^2; % // my curve
speed = sqrt( cos(tt).^2 + (2 * tt).^2 ); % // its local speed
figure
cline(x_v,y_v,speed);
它也适用于 3D,因此您可以按照您的想法将speed
作为第三个坐标。
【讨论】:
以上是关于MATLAB - 根据可比较的 z 值绘制不同颜色的线条的主要内容,如果未能解决你的问题,请参考以下文章