假设有一个值数组将与matlab中的image()函数一起显示:
figure1 = figure('Name', 'Somename', 'Colormap', map);
axes1 = axes('Parent',figure1,...
'XTick',[0.5 : (length(string_array1) - 0.5)],...
'XTickLabel', string_array1,...
'XGrid','on',...
'YTick',[0.5 : (length(string_array2) - 0.5)],...
'YTickLabel', string_array2,...
'YAxisLocation', 'left',...
'YGrid','on',...
'YDir','reverse',...
'Layer','top');
xlim(axes1,[0.5 (length(string_array1) + 0.5)]); % preserve the X-limits
ylim(axes1,[0.5 (length(string_array2) + 0.5)]); % preserve the Y-limits
box(axes1,'on');
hold(axes1, 'all');
image(values, 'Parent', axes1);
这将返回左侧y轴和底部x轴上带有标签的图形。我想提供包含在string_array3中的附加信息,它与string_array2的长度相同,并显示在图的右侧。我该怎么做呢?我意识到plot()函数有类似主题的线程,但我不能将提供的解决方案转移到我的案例中。
答案 0 :(得分:2)
您可以在axes1
上创建一个新的透明轴,并调整其限制/属性以使其适合它。然后你可以添加自己的标签。
例如,在代码末尾添加以下行:
%// Dummy labels
string_array3 = {'X_right';'Y_right';'Z_right'};
%// Create new axes
axes2 = axes('Position',get(axes1,'Position'),'Color','none','YAxisLocation','right','YDir','reverse','XTick',[],'YTick',[]);
%// Adjust limits and properties...
set(axes2,'YLim',get(axes1,'YLim'),'YTick',0.5 : (length(string_array3) + 0.5),'YTickLabel',string_array3);
这应该有用。
包含虚拟数据的整个代码:
clc
clear
values = [0 2 4 6; 8 10 12 14; 16 18 20 22];
string_array1 = {'a';'b'; 'c'; 'd'};
string_array2 = {'X';'Y';'Z'};
figure1 = figure('Name', 'Somename');
axes1 = axes('Parent',figure1,...
'XTick',[0.5 : (length(string_array1) + 0.5)],...
'XTickLabel', string_array1,...
'XGrid','on',...
'YTick',[0.5 : (length(string_array2) + 0.5)],...
'YTickLabel', string_array2,...
'YAxisLocation', 'left',...
'YGrid','on',...
'YDir','reverse',...
'Layer','top');
hold(axes1, 'all');
xlim(axes1,[0.5 (length(string_array1) + 0.5)]); % preserve the X-limits
ylim(axes1,[0.5 (length(string_array2) + 0.5)]); % preserve the Y-limits
box(axes1,'on');
image(values,'CDataMapping','scaled', 'Parent', axes1);
%// Dummy labels
string_array3 = {'X_right';'Y_right';'Z_right'};
%// Create new axes
axes2 = axes('Position',get(axes1,'Position'),'Color','none','YAxisLocation','right','YDir','reverse','XTick',[],'YTick',[]);
%// Adjust limits and properties...
set(axes2,'YLim',get(axes1,'YLim'),'YTick',0.5 : (length(string_array3) + 0.5),'YTickLabel',string_array3);
输出: