2

MATLAB で次のことを行う方法がわかりません。次のような図があります。

ここに画像の説明を入力


図には、多くのサブプロットを含むパネルと、パネルの一部を表示できるスクロールバーがあります。

パネルの内容全体(表示部分だけでなく) を PNG 画像ファイルに保存したい、つまり、縦長の長方形でスクロールを必要としないファイルが必要です。

Figure を生成するコードは次のとおりです。

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

次のことを試しましたが、成功しませんでした。

  1. 関数はsaveas、パネルだけでなく、図全体を保存します。また、パネルの見えない部分をクリップします。
  2. export_fig(panel2.'file.png')単色の灰色の画像のみを提供します。
4

2 に答える 2

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
于 2013-08-13T05:48:13.890 に答える
0
  • ui 要素を取り除き、すべてのサブプロットを含む Figure を作成してから、たとえばprint -dpng ....

  • saveas最初の引数としてハンドルを取ります。これは Figure やモデル ハンドルである必要はなく、パネルの内容への参照である可能性があります。

于 2013-10-10T19:37:49.360 に答える