图像c上的文本中有两个级别的y轴刻度标签

时间:2014-04-06 00:13:49

标签: matlab text plot axis

我根据4x5矩阵的值绘制一个颜色/阴影网格的图形。

使用单元格数组中的文本设置x轴和y轴刻度标签。

y轴刻度标签存在于2个级别

% y ticks, 2 levels
ylabelnames = {'team1','set1';'team1','set2';'team2','set1';'team2','set2'}; 

我喜欢y轴刻度标签

1)跨越2行,以便它们匹配在图的正方形中重叠的2行文本,即' team#'在第一行和#39;设置#'在imagesc网格的每一行的第二行,或

2)旋转标签' team1'跨越前两行并旋转标签' team2'跨越最后两行,不再重复使用' team1' ' TEAM2'在标签上。

我的整个代码:

%% Plot
Matrix = rand(4,5);
Matrix2 = rand(4,5);
% y ticks, 2 levels
ylabelnames = {'team1','set1';'team1','set2';'team2','set1';'team2','set2'}; 
xlabelnames = {'group1','group2','group3','group4','group5'};

sigfig = 2;
spacer = '\n';
% Font sizes
plotFontSize = 8;    labelFontSize = 8;    plotWidth = 500;    plotLength = 300;

imagesc(abs(Matrix))
colormap('gray')
colormap(flipud(colormap))
caxis([0 2])

for rows = 1:size(Matrix,1)
    for columns = 1:size(Matrix,2)
        if abs(Matrix2(rows,columns))<= 0.5 % Show 2nd values less than 0.5
            num = Matrix2(rows,columns);
            num = vpa(num,sigfig);
            num = ['= ' char(num)];
            rval = sprintf('%0.2g', Matrix(rows,columns));
            message = sprintf([ 'val= ' rval spacer 'val2' num '' ]);
            text(columns,rows, message,'HorizontalAlignment','center',...
                'FontSize',plotFontSize,'FontName','Times New Roman'); 
        end
    end
end
% Put on tick labels
set(gca,'Ticklength', [0 0],'YTick',1:size(Matrix),'XTick',1:length(xlabelnames),...
    'YTickLabel',ylabelnames,'XTickLabel',xlabelnames,...
    'FontSize',labelFontSize,'FontName','Times New Roman')

如果你运行它,你会发现只使用y标签的第一列,即使每个imagesc行有足够的空间来容纳2行文本。

我确实想到了一种糟糕的黑客攻击方式,即使用

ylabel('team1                                         team2')

标签之间有巨大的空间,可以在y行之间均匀分布,但如果我要增加矩阵的大小,那就不方便了,所以我不喜欢这样做

有没有办法实现我需要的多级y刻度标签?

谢谢!

1 个答案:

答案 0 :(得分:0)

在您的示例中,我将使用text函数。例如,你可以添加:

text(-0.05,1.5,'team1','HorizontalAlignment','center','Rotation',90 );
text(-0.05,3.5,'team2','HorizontalAlignment','center','Rotation',90 );

并看到结果。诀窍是要理解每个“像素”(或imagesc单元格元素)也是函数的'文本'x和y输入的单位(如果你没有不同的缩放比例,也是蜱的单位),所以介于两者之间第一个和第二个块使用y = 1.5或y = 3.5等... 离开左边的图像使用负x值(x = -0.05)等。阅读更多关于text properties here ......