5

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

imagesc(X);

并且所有行都使用以下标签进行标记:

set(gca, 'YTickLabel', somelabels);

尽管数据 X 已正确绘制并且还显示了 Ytick 标签,但由于行数很大,标签高度重叠。有没有办法解决这个问题?任何帮助将不胜感激。

编辑 1

我意识到我的问题没有很好地说明我的问题。我将根据答案总结我的理解并重新提出一个问题:

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

    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]);
    

    默认情况下会显示放大的图像。但是,如果放大的图像太大而无法放入“图形窗口”,则只会显示部分图像。但是,无论是缩小还是平移工具都无法到达该图像的其余部分。

  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中的放大图像仍然是标签重叠的。

所以我的问题是:
如何将图像保存到 pdf 文件或 png 中,以使其在 Adob​​e 阅读器中打开时具有与 上述第 3 点类似的行为,而不是第 4 点的行为?

4

2 回答 2

4

您还可以使用轴标签字体使其更小。

set(gca,'FontSize',6)

另请参阅其他轴属性以更改字体 - 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)

结果图像的一部分:

示例图像

更新

回答您更新的问题。

  1. PDF 文档只能包含静态图像。将图形保存为 PDF(或任何其他图形文件)后,您无法像使用 MATLAB 图形工具那样放大/缩小。
  2. 您可以先放大 MATLAB 图,然后保存 PDF 文件。在这种情况下,图形将按原样保存。但是这种方式假设用户与图形交互。
  3. 如果您提前知道您感兴趣的区域,您可以使用 XLim/YLim 属性设置坐标轴范围,然后保存图窗。

例子:

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')
于 2010-09-09T03:45:30.087 回答
4

另一种选择是旋转此技术解决方案中讨论的刻度标签。您可以在 MATLAB File Exchange 上找到许多易于使用的实现。

替代文字

于 2010-09-09T04:35:17.323 回答