使用存储在矢量中的坐标和数据生成热图

时间:2015-04-13 18:48:45

标签: matlab plot matlab-figure heatmap

设A是一个n乘3的矩阵,这样前两列都是从1到200的i(5 * i,5 * i)形式的有序对。第三列包含从0到1的值,我将称之为强度。我想制作一个1000乘1000的绘图,以便(5 * i,5 * i)的矩形用第三列条目描述的强度着色。

我熟悉热图功能和imshow,但我没有看到一种方法来包含这个"缩放5"做一个好的情节。当然,一般来说,x和y坐标可能不会按相同的比例缩放。

在Matlab中有一个很好的方法吗?

2 个答案:

答案 0 :(得分:3)

imagesc实际上很简单:

首先是一些示例数据:

%// generate example data
ii = 1:200;
[xx,yy] = meshgrid(ii);
A(:,1) = 5*xx(:);
A(:,2) = 5*yy(:);
A(:,3) = randi([0,1],1,40000);

实际答案

n = 200;

%// reshape data
D = reshape( A(:,3),n,n );

%// heatmap
imagesc(A(:,1),A(:,2),D)
colormap(gray)
caxis([0,1])

给出:

enter image description here

重要通知

如果您的坐标未按imagesc的要求排序,则可以使用以下方式对其进行排序:

A = sortrows(A,[2,1]);

小丑示例

%// original image
load clown
I = reshape(1:numel(X),size(X));
[R,C] = ind2sub(size(X),I);
A(:,1) = R(:);
A(:,2) = C(:);
A(:,3) = X(:);
D = reshape( A(:,3),200,320 );
figure(1)
subplot(1,3,1)
imagesc(A(:,1),A(:,2),D)

%// shuffled image -> shuffled data
shuffle = randperm(320*200);
A = A(shuffle,:);
D = reshape( A(:,3),200,320 );
subplot(1,3,2)
imagesc(A(:,1),A(:,2),D)

%// sorted image
A = sortrows(A,[2,1]);
D = reshape( A(:,3),200,320 );
subplot(1,3,3)
imagesc(A(:,1),A(:,2),D)

enter image description here

您会看到,即使您的坐标排列得一团糟,也可以使用sortrows重建图像。

答案 1 :(得分:0)

请参阅this

function DrawHeatmap(X,Y,Z)
%DRAWHEATMAP Draw a 2D heatmap for (X,Y) coordinates whose values are in Z
%   X, Y , Z must be columns
%   By: Eng. Osama Talaat Abdel-Hafiz - PhD Student
%   Egypt - Sept 2017
    if size(X,2)==1 && size(Y,2)==1 && size(Z,2)==1
        F = scatteredInterpolant(X,Y,Z); % create a function from interpolation
        [X,Y] = meshgrid(min(X):0.1:max(X),min(Y):0.1:max(Y));
        Z = F(X,Y);
        contourf(X, Y, Z, linspace(floor(min(min(Z))),ceil(max(max(Z))),400), 'LineColor','none')
        colorbar;
    else
        error('X, Y , Z must be columns')
    end
end