PDA

查看完整版本 : 如何使图像足够大以避免刻度标签重叠?


poster
2019-12-10, 20:48
假设数据X的大小为1000 * 1000。使用以下命令显示X:

imagesc(X); 并使用以下标签标记所有行:

set(gca, 'YTickLabel', somelabels); 尽管已正确绘制了数据X并显示了Ytick标签,但由于行数很多,因此标签高度重叠。有什么办法解决这个问题?任何帮助将不胜感激。

编辑1

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


要在“ 图形窗口”中显示尽可能多的行/标签,以下帮助:

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

set(gca,'Units','pixels','Position',[20 20 10000 10000]); 默认情况下将显示放大的图像。但是,如果放大的图像太大而无法容纳在“ 图形窗口”中 ,则将仅显示图像的一部分。但是, 缩小或平移工具都无法到达该图像的其余部分。

代码的默认行为

imagesc(X); set(gca, 'ytick', 1:1000, 'yticklabe', ylabel); 用重叠的标签将整个图像拟合显示在“ 图形窗口”中 。不过,它确实允许人们放大图像的一部分并查看未重叠的标签。

如果我将图像保存到pdf文件中:

imagesc(X); set(gca, 'ytick', 1:1000, 'yticklabe', ylabel); saveas(gcf, 'fig.pdf'); 然后,保存的pdf仅是带有重叠标签的适合“ 图形窗口”的图像。然而, 在 Matlab图窗口中不同变焦 , 在 pdf阅读器内不会改变标签的相对位置/距离。结果,以pdf格式放大的图像仍会与标签重叠。

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



回答:

您也可以使用轴标签字体来使其变小。

set(gca,'FontSize',6) 另请参见其他轴属性 (http://www.mathworks.com/help/techdoc/ref/axes_props.html)以更改字体-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) 结果图像的一部分:

https://i.stack.imgur.com/vjvjZ.png

更新

回答您的更新问题。


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

imagesc(X); set(gca, 'ytick', 1:1000, 'yticklabe', ylabel); set(gca, 'XLim',[1 20], 'YLim', [20 40]) saveas(gcf, 'fig.pdf'); 顺便说一句,您还可以使用PRINT (http://www.mathworks.com/help/techdoc/ref/print.html)功能将图形保存到文件中。更灵活。 SAVEAS只是包装。

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

更多&回答... (https://stackoverflow.com/questions/3673491)