MATLAB:密度-时间图

MATLAB:密度-时间图,matlab,matrix,plot,density-plot,Matlab,Matrix,Plot,Density Plot,我有11个包含密度的1x50矩阵。第一个看起来像[20,20,20…20],表示时间=0。第二个看起来像[20,19,22,…]等,表示时间=100。这些值持续变化,直到t=1000 我希望做的是创建一个绘图,元素在x轴上的位置(每个元素中50个数据的50个位置)和时间(0-1000)在y轴上。理想情况下,我希望绘图完全填充颜色密度,并在侧面显示颜色范围代表的密度的颜色栏 任何帮助都将不胜感激 灵感来源于:假设您拥有(或可以安排拥有)所有这些向量作为11x50矩阵的列: A = randi(10

我有11个包含密度的1x50矩阵。第一个看起来像[20,20,20…20],表示时间=0。第二个看起来像[20,19,22,…]等,表示时间=100。这些值持续变化,直到t=1000

我希望做的是创建一个绘图,元素在x轴上的位置(每个元素中50个数据的50个位置)和时间(0-1000)在y轴上。理想情况下,我希望绘图完全填充颜色密度,并在侧面显示颜色范围代表的密度的颜色栏

任何帮助都将不胜感激

灵感来源于:

假设您拥有(或可以安排拥有)所有这些向量作为11x50矩阵的列:

A = randi(100, 11,50); %//example data
你可以用

imagesc(1:50, 0:100:1000, A)
colorbar
axis xy %// y axis increasing, not decreasing
例如:

假设您拥有(或可以安排拥有)所有这些向量作为11x50矩阵的列:

A = randi(100, 11,50); %//example data
你可以用

imagesc(1:50, 0:100:1000, A)
colorbar
axis xy %// y axis increasing, not decreasing
例如:


查看注释,将这些向量堆叠到2D矩阵中会更容易。您有11个单独命名的向量。假设向量名为
vec1
vec2
vec3
等,则创建一个二维矩阵
a
,将这些向量堆叠在一起。此外,您还需要在此矩阵末尾包含一个额外的行和列,其中包含所有向量的最小值。这一点的原因稍后会很明显,但现在请相信我的话,因为这正是你所需要的

换言之:

A = [vec1; vec2; vec3; vec4; vec5; vec6; vec7; vec8; ...
     vec9; vec10; vec11];
minA = min(A(:));
A = [A minA*ones(11,1); minA*ones(1,51)];
因此,第一行包含时间0的信息,下一行包含时间100的信息,等等,直到时间1000

现在我们已经完成了,我们可以使用函数为您绘制这些数据
pcolor
表示伪彩色棋盘图。你可以这样称呼它:

pcolor(A);
这将获取存储在
a
中的矩阵,并生成数据的棋盘图。矩阵中的每个点都指定了一种颜色。颜色会自动映射,以便将最小值映射到最低颜色,而将最高值映射到最高颜色
pcolor
不绘制矩阵的最后一行和最后一列,但
pcolor
使用矩阵中的所有数据。为了确保正确映射颜色,我们需要填充矩阵,以便将最后一行和最后一列指定给所有向量的最小值。当您想要在矩阵中绘制所有值时,这就是为什么我们要做上面所做的

一旦我们这样做,我们将需要修改X和Y记号,使其符合您的数据。因此:

pcolor(A);
set(gca, 'XTick', 0.5:5:51.5);
set(gca, 'XTickLabel', 0:5:50);
set(gca, 'YTick', 1.5:11.5);
set(gca, 'YTickLabel', 0:100:1000);
xlabel('Sample Number');
ylabel('Time');
colorbar;
上面的代码所做的是生成一个棋盘模式,就像我们所说的那样。当时间在y轴上时,这会在x轴上标记样本编号。您将看到,我使用了两个
set
命令,这有点像黑客。默认情况下,y轴标记为从1到12的刻度。我所做的是,我更改了这些标签,使它们以100的步长从0变为1000,并且我还删除了12的勾号。此外,我已确保这些标签位于每行的中间。我通过设置
YTick
属性来实现这一点,以便在1-11之间的每个值上添加0.5。一旦我这样做了,我就会改变标签,使它们以100的步长从0到1000。我也以与y轴类似的方式对x轴执行相同的操作。然后,我会根据您的要求在侧面添加一个
色条

遵循上述代码,并根据您的评论生成介于13和27之间的随机整数数据:

A = randi([13,27], 11, 50);
minA = min(A(:));
A = [A minA*ones(11,1); minA*ones(1,51)];
我们得到:

显然,颜色栏的限制将根据数据的动态范围而变化。我使用了
randi
并生成了13到27之间的随机整数。当您将此代码用于您的目的时,颜色栏的范围将根据数据的动态范围而变化,但颜色将相应地进行调整


祝你好运

查看注释,将这些向量堆叠到2D矩阵中会更容易。您有11个单独命名的向量。假设向量名为
vec1
vec2
vec3
等,则创建一个二维矩阵
a
,将这些向量堆叠在一起。此外,您还需要在此矩阵末尾包含一个额外的行和列,其中包含所有向量的最小值。这一点的原因稍后会很明显,但现在请相信我的话,因为这正是你所需要的

换言之:

A = [vec1; vec2; vec3; vec4; vec5; vec6; vec7; vec8; ...
     vec9; vec10; vec11];
minA = min(A(:));
A = [A minA*ones(11,1); minA*ones(1,51)];
因此,第一行包含时间0的信息,下一行包含时间100的信息,等等,直到时间1000

现在我们已经完成了,我们可以使用函数为您绘制这些数据
pcolor
表示伪彩色棋盘图。你可以这样称呼它:

pcolor(A);
这将获取存储在
a
中的矩阵,并生成数据的棋盘图。矩阵中的每个点都指定了一种颜色。颜色会自动映射,以便将最小值映射到最低颜色,而将最高值映射到最高颜色
pcolor
不绘制矩阵的最后一行和最后一列,但
pcolor
使用矩阵中的所有数据。为了确保正确映射颜色,我们需要填充矩阵,以便将最后一行和最后一列指定给所有向量的最小值。当您想要在矩阵中绘制所有值时,这就是为什么我们要做上面所做的

一旦我们这样做,我们将需要修改X和Y记号,使其符合您的数据。因此:

pcolor(A);
set(gca, 'XTick', 0.5:5:51.5);
set(gca, 'XTickLabel', 0:5:50);
set(gca, 'YTick', 1.5:11.5);
set(gca, 'YTickLabel', 0:100:1000);
xlabel('Sample Number');
ylabel('Time');
colorbar;
上面的代码所做的是生成一个棋盘格