【问题标题】:Two levels of y-axis tick labels in text on imagescimagesc 上文本中的两级 y 轴刻度标签
【发布时间】:2014-04-06 00:13:48
【问题描述】:

我正在绘制一个基于 4x5 矩阵的值的颜色/阴影网格图形。

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

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

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

我想要 y 轴刻度标签到任一

1) 跨越 2 行,以便它们与覆盖在绘图方块中的 2 行文本相匹配,即第一行的“team#”和每行第二行的“set#” imagesc 网格,或

2) 旋转标签“team1”以跨越前 2 行,并旋转标签“team2”以跨越后 2 行,以免在标签中重复使用“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 行文本。

我确实想到了一个可怕的hack方式,就是使用

ylabel('team1                                         team2')

标签之间的巨大空间可以将它们均匀地分布在 y 行之间,但是如果我要增加矩阵的大小,那并不方便,所以我不想那样做。

有什么方法可以实现我需要的多级y刻度标记吗?

谢谢!

【问题讨论】:

标签: matlab text plot axis


【解决方案1】:

在您的示例中,我将使用 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...

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    相关资源
    最近更新 更多