Строки как метки HeatMap

У меня есть матрица 40x40 в качестве набора данных, и я хочу назначить строковые переменные в качестве меток строк и столбцов для тепловой карты, созданной с помощью MATLAB. Я не могу правильно интерпретировать синтаксис страницы справки. Кто-нибудь может мне помочь?


person user2203793    schedule 09.12.2013    source источник
comment
Можете ли вы поделиться своим кодом и сообщением об ошибке, которое вы получаете, пожалуйста? Это может облегчить вам объяснение помощи Matlab, не цитируя ненужные фрагменты.   -  person Schorsch    schedule 09.12.2013
comment
Все, что у меня есть, это матричный вектор с элементами 40x40, который я построил с помощью команды HeatMap(matrix).   -  person user2203793    schedule 10.12.2013


Ответы (1)


Принцип всегда один и тот же. Сначала более общий пример, а ниже специально для функции HeatMap.


Поэтому я предполагаю, что ваши данные x и y не являются фактическим вектором индекса.

% example data
x = linspace(-20,40,40);
y = linspace(20,100,40);
[X,Y] = meshgrid(x,y);
heat = X.*Y;

% the plot
figure(1)
surf(X,Y,heat)
view(0,90)
colormap(hot)
colorbar

% the ticks
xticks = 1:numel(x);
yticks = 1:numel(y);

set(gca,'XTick',x,'XTickLabels',xticks)
set(gca,'YTick',y,'YTickLabels',xticks)

введите здесь описание изображения

Лично я бы пропустил каждое второе значение, и вы также можете перемещать метки, чтобы они располагались под каждым цветным столбцом/строкой, а не между ними/в сетке.

set(gca,'XTick',x(1:2:end)+(x(2)-x(1))/2,'XTickLabels',xticks(1:2:end))
set(gca,'YTick',y(1:2:end)+(x(2)-x(1))/2,'YTickLabels',xticks(1:2:end))

введите здесь описание изображения


И для функции HeatMap. Тот же принцип снова, только вам нужен массив ячеек строк. Например, я использовал числа 1 to 40 в качестве строк. Вы можете заменить его массивом строковых ячеек.

% same example data as above
xticks = 1:numel(x);
yticks = 1:numel(y);
%xticks as string cell array
xStrings = arrayfun(@num2str, xticks, 'Uniform', false);  
%yticks as string cell array
yStrings = arrayfun(@num2str, yticks, 'Uniform', false);  
HeatMap(heat,'RowLabels', yStrings, 'ColumnLabels', xStrings)

введите здесь описание изображения


или немного более похоже на строку:

labelString = 'helloworldhelloworldhelloworldhelloworld';
labels = strsplit(sprintf('%c ',labelString),' ');
labels = labels(1:end-1);
HeatMap(heat,'RowLabels', fliplr(labels), 'ColumnLabels', labels)

введите здесь описание изображения

person thewaywewalk    schedule 09.12.2013
comment
Я хочу назначить строковые элементы в качестве меток, и у меня нет отдельных векторов строк и столбцов. Я пытался создать тепловую карту с помощью функции HeatMap, но даже тогда было сложно назначать метки строковым элементам. - person user2203793; 09.12.2013