如何使图像足够大以避免刻度标签重叠?

时间:2010-09-09 03:05:59

标签: matlab label overlapping

假设数据X的大小为1000 * 1000。使用以下命令显示X:

imagesc(X);

并使用以下标记所有行:

set(gca, 'YTickLabel', somelabels);

虽然数据X被正确地调整并且还显示了Ytick标签,但由于行数很多,标签高度重叠。有什么方法可以解决这个问题吗?任何帮助将受到高度赞赏。

修改1

我意识到我的问题并不能很好地代表我的问题。我将根据答案结束我的理解并重新提出一个问题:

  1. 要在图窗口中显示尽可能多的行/标签,以下内容会有所帮助:

    set(gca,'FontSize',6), 
    or, alternate the distance (suggested by yuk),
    or, set(gca,'YTick',1:10:1000,'YTickLabel',somelabels(1:10:1000));
    
  2. 代码

    set(gca,'Units','pixels','Position',[20 20 10000 10000]);
    
    默认情况下,

    将显示放大的图像。但如果放大的图像太大而无法放入图窗口,则只会显示部分图像。但是,缩小 pan 工具都不能到达该图像的其余部分。

  3. 代码的默认行为

    imagesc(X);
    set(gca, 'ytick', 1:1000, 'yticklabe', ylabel);
    

    显示符合重叠标签的图窗口的整个图像。然而,它确实允许人们放大图像的一部分并看到未重叠的标签。

  4. 如果我将图像保存为pdf文件:

    imagesc(X);
    set(gca, 'ytick', 1:1000, 'yticklabe', ylabel);
    saveas(gcf, 'fig.pdf');
    

    然后保存的pdf只是符合重叠标签的图窗口的图像。但是,与Matlab图形窗口中的放大不同,pdf阅读器中的放大不会改变标签的相对位置/距离。因此,pdf中的放大图像仍然是标签重叠的。

  5. 所以我的问题是:
    如何将图像保存为pdf文件或png,使其在Adobe Reader中打开时具有与 point 3 类似的行为,而不是 point 4 的行为?

2 个答案:

答案 0 :(得分:4)

您还可以使用轴标签字体来缩小它。

set(gca,'FontSize',6)

另请参阅其他axes properties更改字体 - FontName,FontWidth,FontUnits等。

另一种解决方案:如果您的标签很短,您可以与轴交替距离,因此标签不会重叠。检查此示例:

lbl = cellstr(reshape(sprintf('%3d',1:100),3,100)');
lbl(1:2:100) = strcat(lbl(1:2:100),{'     '});
imagesc(rand(100))
set(gca,'ytick',1:100)
set(gca,'yticklabel',lbl)

部分结果图片:

example image

<强>更新

回答您的最新问题。

  1. PDF文档只能包含静态图像。将图形保存为PDF(或任何其他图形文件)后,您无法像使用MATLAB图形工具一样放大/缩小。
  2. 您可以先在MATLAB图上进行缩放,然后保存PDF文件。在这种情况下,图形将保存原样。但这种方式假设用户与图形互动。
  3. 如果您事先知道您感兴趣的区域,可以使用XLim / YLim属性设置轴限制,然后保存图形。
  4. 示例:

    imagesc(X);
    set(gca, 'ytick', 1:1000, 'yticklabe', ylabel);
    set(gca, 'XLim',[1 20], 'YLim', [20 40])
    saveas(gcf, 'fig.pdf');
    

    顺便说一下,您还可以使用PRINT功能将图形保存到文件中。更灵活。 SAVEAS就是它的包装。

    print('-dpdf','fig.pdf')
    

答案 1 :(得分:4)

另一种选择是旋转this technical solution中讨论的刻度标签。您可以在MATLAB文件交换中找到许多易于使用的实现。

alt text