У меня есть матрица 40x40 в качестве набора данных, и я хочу назначить строковые переменные в качестве меток строк и столбцов для тепловой карты, созданной с помощью MATLAB. Я не могу правильно интерпретировать синтаксис страницы справки. Кто-нибудь может мне помочь?
Строки как метки HeatMap
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
Я хочу назначить строковые элементы в качестве меток, и у меня нет отдельных векторов строк и столбцов. Я пытался создать тепловую карту с помощью функции HeatMap, но даже тогда было сложно назначать метки строковым элементам.
- person user2203793; 09.12.2013