我有一个令人不安的问题,我一直试图找出相当长一段时间,我不知道为什么会发生这种情况.我有一个自编码的GUI,我在主GUI图上有一个面板.在这个面板上我有一个轴,每当我在这些轴上绘制条形图并尝试使用yLim()或axis()编辑其视图时,轴将调整为我想要的尺寸,但条形图不会在轴的边缘切断,它将继续在页面上运行.在调试模式中玩了一段时间之后,我发现如果我从面板更改轴的父级到主图,条形图将正确显示轴边界内的内容,就像我想要的那样它来.我不想使用更改轴的父级作为永久解决方案,因为我想要介于几个不同的面板之间并且在主图上有一个轴而不是面板不起作用但我想知道如果有人知道为什么会这样,以及我如何解决它.
例如,此代码产生我遇到的问题:
mainFig = figure('Units','characters',...
'Position',[40 5 200 50],...
'Color',[100/255 145/255 209/255]);
axesPanel = uipanel('bordertype','etchedin',...
'Parent',mainFig,...
'Title','Axes Panel');
mainAxes = axes('parent',axesPanel,...
'Units','characters');
bar(mainAxes,1:10,1:10)
ylim(mainAxes,[6 10])
Run Code Online (Sandbox Code Playgroud)
如果将轴的父级更改为数字,则问题不存在.这行代码确实如此:
set(mainAxes,'parent',mainFig)
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助或信息,为什么会发生这种情况!
小智 2
为了防止其他人遇到同样的问题,我联系了 MATLAB 技术支持,并被告知这是 MATLAB 端的一个错误,正在下一版本 (R2014b) 中修复。他们说,如果您遇到我在原来的问题中描述的问题,为了使条形图此时出现在轴的边界内,您可以编辑图形的“渲染器”属性并将其设置为“ opengl' 或 'zbuffer'。我已经测试过这个,两个选项都有效,希望能有所帮助:)
如果需要的话,为了额外澄清,我需要对原始代码进行更改的是:
mainFig = figure('Units','characters',...
'Position',[40 5 200 50],...
'Color',[100/255 145/255 209/255]);
Run Code Online (Sandbox Code Playgroud)
对此:
mainFig = figure('Units','characters',...
'Renderer','opengl',...
'Position',[40 5 200 50],...
'Color',[100/255 145/255 209/255]);
Run Code Online (Sandbox Code Playgroud)
现在条形图的表现就如其应有的那样。