如何从matlab中的gcf空白空间中裁剪出gca和colorbar?

Posted

技术标签:

【中文标题】如何从matlab中的gcf空白空间中裁剪出gca和colorbar?【英文标题】:How to crop out gca and colorbar from gcf empty space in matlab? 【发布时间】:2013-10-01 17:50:49 【问题描述】:

彩条引入后如何去除右侧的灰色空间?

在将颜色条添加到 gcf 空间之前,我使用 gca 来保存图像和徽标,因为一旦将颜色条添加到图形中,我需要它们的尺寸和比例纵横比不会改变。当我添加颜色条时,它位于 gca 的右侧。添加colorbar时出现额外空白的原因是因为我将窗口屏幕尺寸(gcf)设置为[16 9],这意味着gca和colorbar的宽度都会小于图形的屏幕尺寸(gcf )。我尝试了很多不同的方法来从 gcg 中裁剪 gca 和 colorbar,但每次我尝试 gca 图像都会变形。

我正在使用:

backMap=imread(...);
mapSize=size(backMap);
image(backMap);
screenSize=[16 9]
screen ='verti';
set(gcf,'units','normalized','Position',[0 0 1 1]);

switch screen
    case 'verti'
        set(gca,'Position',[0 0 (mapSize(2)/mapSize(1))*(screenSize(2)/screenSize(1)) 1]);
    case 'horiz'
        set(gca,'Position',[0 0 1 (mapSize(1)/mapSize(2))*(screenSize(1)/screenSize(2))]);
    otherwise
        error ('not well defined screen');
end
h1=colormap;
h2=colorbar;

set(gca, 'XTick', [], 'YTick', []);
h4=get(h_bar,'position');


pos=get(gca,'position');
figm=get(gcf,'position');

set(gcf, 'position', [pos(1) pos(2), 1-(pos(3)+h4(3)) pos(4)])
fig1 =getframe(gcf);
imwrite(fig1.cdata, [outputFileName2 'x3.tiff']);

【问题讨论】:

您使用的是脚本还是指南?你可以看看 set(YourHandle, 'Position', [0, 0.3, 1, 0.5]);定位您的项目。 你好 Alexandre,我刚刚更新了代码 此代码不起作用。什么是 h_bar ?我不认为它是 h2,所以......你不能真正删除灰色空间。您可以移动栏或调整其大小以占用所有空间。否则我真的不知道你能做什么。 【参考方案1】:

如果您将案例“verti”更改为:

case 'verti'
    set(gca,'Position',[0.05 0 (mapSize(2)/mapSize(1))*(screenSize(2)/screenSize(1)) 1]);

和评论

set(gca, 'XTick', [], 'YTick', []);
%h4=get(h_bar,'position');


%pos=get(gca,'position');
%figm=get(gcf,'position');

%set(gcf, 'position', [pos(1) pos(2), 1-(pos(3)+h4(3)) pos(4)])
fig1 =getframe(gcf);
imwrite(fig1.cdata, [outputFileName2 'x3.tiff']);

你的图片看起来更好,但我不知道你最后需要什么。

【讨论】:

感谢您的评论。图形的大小,gcf,是 1600px,但我想只保存 gca 和 h_bar/h2(颜色条)的内容,大约是 810px。我想我可以通过使用 set(gcf, 'position', [pos(1) pos(2), 1-(pos(3)+h4(3)) pos(4)]) 来裁剪它们,但这只会扭曲gca 图像。 也许您可以尝试将 de fig1.cdata 存储在一个矩阵中,并将该矩阵裁剪为 810 像素。喜欢:MyImage = fig1.cdata; MyImage = MyImage(1:810,:,:);然后打电话给你的imwrite。 这听起来是个好主意,唯一的问题是我不能总是预测它总是 810px。有没有办法根据颜色条的位置或位置来确定 gca 和颜色条的像素宽度? 是的,就像你刚才做的那样 get(...,'position');在您需要的对象上,将图像的宽度 + 条形的左侧位置 + 条形的宽度相加,这样您就没有全宽了?

以上是关于如何从matlab中的gcf空白空间中裁剪出gca和colorbar?的主要内容,如果未能解决你的问题,请参考以下文章

如何保存Matlab中Scope的图像以及进行编辑?

plt.gca() 和 plt.gcf() ///////axes和pyplot绘图的区别

如何去掉matlab图片空白边缘的两种方法

matlab保存论文插图

Matlab中的plot(iddata),如何设置坐标轴刻度?

MATLAB设置每条直方图X坐标名称