0

我有以下函数,它应该创建在一行内紧密间隔的子图,并在每列中按间距分布。它还允许您设置边缘的缓冲区大小:

function fill_graph()
for x=1:3
    for y=1:3
        ax = subplot(3,3,(x-1)*3+y);
        left_buffer = .05;
        right_buffer = .025;
        x_pos = left_buffer+(x-1)*(1/3*(1-left_buffer-right_buffer));
        width = 1/3*(1-left_buffer-right_buffer);
        bottom_buffer = .1;
        top_buffer = .05;
        spacing=.07;
        height = (1/3)*(1-2*spacing-top_buffer-bottom_buffer);
        y_pos = bottom_buffer+(y-1)*(spacing+height);
        set(ax,'position',[x_pos,y_pos,width,height])
        if x>1
            set(gca,'yTickLabel','');
            ylabel('');
        end
        if y>1 || x~=2
            xlabel('')
        end
    end
end

当我运行该函数时,底行图和中间行最左边的图都消失了。

我知道这可能与子图相互重叠时会消失这一事实有关,但无论我设置间距有多远,我都无法让底行出现(我唯一的方法'已经发现将底部缓冲区设置在 0.34 以上,这仅在某些时候有效)。我尝试将“位置”切换为“外部位置”,这应该使它们都不重叠,但这似乎也不起作用。

我已经看到第二个子图消失了,但是当我以这种方式(subplot('position',x_pos,y_pos,width,height))指定位置时,它会覆盖已经存在的图。如果我在绘图之前放置该代码,则只要发出 plot 命令,绘图就会调整大小。

4

1 回答 1

1

尝试替换subplot(....)axes().

该命令subplot检查图形上所有现有的轴,以查看是否有任何靠近所需空间,或者可能是由先前的相同 subplot 命令生成的。听起来您正在花费所有时间/精力对这部分 Matlab 算法进行逆向工程。

该命令axes只是在图形上创建一个新轴,无论已经存在什么。例如,我已经构建了轴有意重叠的图。只要您自己完成所有定位工作,就不要在subplot.

于 2013-07-18T20:02:51.347 回答