Как построить трехмерную тепловую карту или гистограмму поверх изображения в Matlab?

У меня есть этот тип данных:

Data = [1:1:9; 1 2 3 4 5 6 7 8 9; 1 2 3 4 5 6 7 8 9 ;1 2 3 4 5 6 7 8 9;1 2 3 4 5 6 7 8 9]; 

Где первая запись - это интересующая зона (всего 9 зон), а оставшиеся 4 записи массива показывают, как долго что-то оставалось в зоне (просто произвольно сейчас для этого вопроса.

Я хочу изобразить, как долго каждая вещь находится в каждой зоне на изображении карты, в виде графика в стиле "тепловой карты". Карта делится на сетку 3х3 примерно так:

1 2 3 

4 5 6

7 8 9

Как мне построить это? Я попробовал функции контура и серфинга, но я не уверен, как бы я отобразил их в сетке. Я хотел бы наложить график на изображение карты в качестве моего последнего шага, но просто получить и запустить график было бы здорово!

2 ответа

Решение

Ты можешь использовать imagescдля 2D версии или bar3 для 3D-версии в этом примере я создал несколько вспомогательных участков, но, конечно, вы можете изменить эту опцию.

Data = [1:1:9; 1 2 3 4 5 6 7 8 9; 1 2 3 4 5 6 7 8 9 ;1 2 3 4 5 6 7 8 9;1 2 3 4 5 6 7 8 9];

M = zeros(3,3);

2D

for ii = 2:size(Data,1)
    subplot(2,2,ii-1)
    M(1:end) = Data(ii,:);
    imagesc(M)
    colormap jet
    shading flat %for an exact result
    % shading interp %for a smooth result 
end

figure

3D (даже если я считаю, что 3D-вид бесполезен)

for ii = 2:size(Data,1)
        subplot(2,2,ii-1)
        M(1:end) = Data(ii,:);
        h{ii} = bar3(M)
        colorbar
    for k = 1:length(h{ii})
        zdata = h{ii}(k).ZData;
        h{ii}(k).CData = zdata;
        h{ii}(k).FaceColor = 'interp';
    end
end

Я не уверен, что это тот тип графика, который вам нужен, но вы можете использовать триангуляцию Делоне, чтобы отобразить данные о продолжительности в виде поверхности над точками сетки. У обмена файлами MatLab есть хорошая функция для отображения чего-либо с помощью этого метода.

Создание поверхностных графиков из данных рассеяния

Другие вопросы по тегам