MATLAB:密度 - 时间图

时间:2014-07-07 22:05:15

标签: matlab matrix plot density-plot

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

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

非常感谢任何帮助!

受灵感来自:http://www.chrisstucchio.com/blog/2012/dont_use_scatterplots.html

2 个答案:

答案 0 :(得分:2)

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

A = randi(100, 11,50); %//example data

你可以使用

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

示例:

enter image description here

答案 1 :(得分:2)

查看注释,将这些向量堆叠到2D矩阵中会更容易。你有11个单独命名的向量。假设您的向量名为vec1vec2vec3等,请创建一个2D矩阵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代表伪彩色棋盘图。你这样称呼:

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;

上面代码的作用是它生成一个像我们所谈论的那样的棋盘图案。这会在x轴上标记样品编号,而时间在y轴上。您将看到我执行的两个set命令,这有点像黑客。默认情况下,y轴标记为1到12之间的刻度。我做的是我更改了这些标签,以便它们以100为步长从0变为1000而我也删除了12的刻度。此外,我有确保这些标签在每行的。我通过设置YTick属性来执行此操作,以便为从1到11的每个值添加0.5。一旦我这样做,然后我更改标签,使它们从0到1000逐步增加到100。也以与y轴类似的方式对x轴进行相同的操作。然后我根据您的要求在旁边添加colorbar

按照上面的代码,根据你的评论生成13到27之间的随机整数数据:

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

我们得到:

enter image description here

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

祝你好运!