使用matlab中的image()函数在左侧和右侧显示带有不同标签的图形

时间:2015-05-18 16:44:33

标签: matlab

假设有一个值数组将与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()函数有类似主题的线程,但我不能将提供的解决方案转移到我的案例中。

1 个答案:

答案 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);

输出:

enter image description here