我不知道如何在MATLAB中完成以下操作。我有一个看起来像这样的数字:
在图中,我有一个包含许多子图的面板和一个滚动条,允许我查看面板的一部分。
我想将面板的整个内容保存到PNG图像文件(而不仅仅是可见部分),即我想要一个高大的矩形文件,而不是需要滚动。
生成图的代码如下:
function draw(obj)
figure;
panel1 = uipanel('Parent',1);
panel2 = uipanel('Parent',panel1);
panelheight = obj.nIterations / 2;
set(panel1,'Position',[0 0 0.97 1]);
set(panel2,'Position',[0 1-panelheight 1 panelheight]); %%
nPlot = 1;
for i=1:obj.nIterations
models = obj.iterations{i};
for nModel=1:length(models)
subplot(obj.nIterations,length(models)*2,nPlot);
nPlot = nPlot + 1;
drawTransitions(models{nModel});
set(gca,'Parent',panel2);
subplot(obj.nIterations,length(models)*2,nPlot);
nPlot = nPlot + 1;
drawRewards(models{nModel});
set(gca,'Parent',panel2);
end
end
s = uicontrol('Style','Slider','Parent',1,...
'Units','normalized','Position',[0.97 0 0.03 1],...
'Value',1,'Callback',{@slider_callback1,panel2,panelheight});
end
我尝试了以下内容,但没有成功。
saveas
funstion保存整个数字,而不仅仅是面板。此外,它会剪切面板的不可见部分。export_fig(panel2.'file.png')
仅提供稳定的灰色图像。答案 0 :(得分:0)
为什么不滚动面板并抓住框架并将它们连接在一起?这里有一些基本上可以做到的代码。我会张贴我的图像,但我想我没有足够的分数。你可能需要摆弄滚动,并可能使滑块不可见,但它可以工作。
function printPanel(pnl,filename)
fig = figure(ancestor(pnl,'figure'));
pnl_units = get(pnl,'units');
fig_units = get(fig,'units');
set(pnl,'units','pixels')
set(fig,'units','pixels')
pnl_rect = getpixelposition(pnl);
fig_rect = getpixelposition(fig);
pnl_height = pnl_rect(4);
fig_height = fig_rect(4);
pnl_rect(2) = -pnl_height;
set(pnl,'position',pnl_rect)
N = ceil(pnl_height/fig_height);
CDATA = cell(N,1);
for i = 1:N
F = getframe(fig);
CDATA{i} = F.cdata;
pnl_rect(2) = pnl_rect(2)+fig_height;
set(pnl,'position',pnl_rect)
drawnow
end
set(pnl,'units',pnl_units)
set(fig,'units',fig_units)
imwrite(cat(1,CDATA{:}),filename)
end
答案 1 :(得分:0)
你可以摆脱ui元素,只需用所有子图创建一个图形,然后使用例如导出那个子图。 print -dpng ...
。
saveas
将句柄作为第一个参数。也许这不一定是数字或模型句柄,但可以是对面板内容的引用。