2012-07-18 614 views
2

我有一个带3轴组件的Matlab GUI。他们的标签是predicted_ax,cost_axerror_ax。我想在第一轴组件(带有标记predicted_ax)的特定位置绘制垂直线。我怎么做?如何在Matlab GUI中在轴上绘制垂直线?

我试过这段代码:

ylim = get(handles.predicted_ax, 'ylim'); 
line([linePos, linePos], ylim); 

但它绘制(那些与标签error_ax)不同轴上行了!我相信我没有混淆标签或轴组件。在事实上另一个测试

ylim = get(handles.cost_ax, 'ylim'); 
line([linePos, linePos], ylim); 

给出完全相同的结果:绘制直线的最后一个组件的轴与标签error_ax。那么我该如何在右侧的轴上画线?

回答

3

您需要设置该行的“父”属性,默认情况下它会一直是当前轴:

h = line([linePos, linePos], ylim); 
set(h, 'parent', handles.predicted_ax); 
+0

这是最好的答案。每条线都有一个父轴。如果您不提供带有轴手柄的line()函数,则默认情况下会将该线附加到“当前”轴。这就是为什么轴(handles.predicted_ax)有效。它使predict_ax成为当前坐标轴,因此之后创建的任何行都将其作为默认父项。但是,我觉得只需将该行的“Parent”属性设置为要附加到的轴就会更清晰。一般来说,当您有更清晰的选项可用时,依靠使用当前坐标轴(gca)或当前图(gcf)并不是一个好主意。 – cholland 2012-07-18 23:01:40

+2

作为一个侧面说明。你可以这样做:'line([linePos,linePos],ylim,'Parent',handles.predicted_ax)' – cholland 2012-07-18 23:02:27

+0

@cholland这将是最好的答案,如果它的工作。但事实并非如此。 – drasto 2012-07-19 09:57:24

1

我认为您需要使用axes命令来设置绘制线条的当前坐标轴。在您的line命令之前尝试axes(handles.predicted_ax);

(获取的轴ylim价值显然不让它电流)。

+0

+1它的工作原理,谢谢! – drasto 2012-07-18 22:26:42