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 值绘制不同颜色的线条的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB实现矩阵里数值的大小对应颜色的深浅

matlab 用surf绘制出的曲面上颜色代表的含义

线图的matlab颜色条按值着色

matlab中surf啥意思

matlab中mesh和surf有啥区别

matlab怎么让三维图形有不同颜色