具有'yyaxis'的轴属性的行为

问题描述 投票:1回答:1

[使用yyaxis创建具有两个y轴的图形:

yyaxis

已发现以下奇怪行为。已在Windows 10的R2017b和R2019a中测试过。

对象figure yyaxis left hl = plot([0 10],[0 10],'-'); yyaxis right hr = plot([0 10],[10 0],'--'); hl似乎属于相同轴(即hr不会创建新轴):

yyaxis

但是,轴的>> get(hr, 'parent')==get(hl, 'parent') ans = logical 1 属性仅反映一个对象

'children'

此外,父轴的>> get(get(get(hl, 'parent'), 'children'), 'LineStyle') ans = '--' >> get(get(get(hr, 'parent'), 'children'), 'LineStyle') ans = '--' 属性对于两个对象都具有相同的值

YAxisLocation'

如果现在单击实线,使其成为当前对象,

>> get(get(hl, 'parent'), 'YAxisLocation')
ans =
    'right'
>> get(get(hr, 'parent'), 'YAxisLocation')
ans =
    'right'

类似地,如果我们现在单击虚线,

>> get(get(get(gco, 'parent'), 'children'), 'LineStyle')
ans =
    '-'
>> get(get(get(hl, 'parent'), 'children'), 'LineStyle')
ans =
    '-'
>> get(get(get(hr, 'parent'), 'children'), 'LineStyle')
ans =
    '-'
>> get(get(gco, 'parent'), 'YAxisLocation')
ans =
    'left'

作为支票,

>> get(get(get(gco, 'parent'), 'children'), 'LineStyle')
ans =
    '--'
>> get(get(get(hl, 'parent'), 'children'), 'LineStyle')
ans =
    '--'
>> get(get(get(hr, 'parent'), 'children'), 'LineStyle')
ans =
    '--'
>> get(get(gco, 'parent'), 'YAxisLocation')
ans =
    'right'

也只给出一个轴,并且

>> get(gcf, 'children')

具有类似的行为:仅列出最后绘制的对象,或者已使该对象成为当前对象。

上述行为可以摘要如下:

  • 仅一个轴(并且所有对象的>> get(get(gcf, 'children'), 'children') 属性均按预期引用该轴)。
  • 轴的'parent'属性列出仅一个对象,即当前对象或最后绘制的对象。
  • C0]和'children'之间的轴[[动态改变的['YAxisLocation'属性]。同样,这由当前对象或最后绘制的对象确定。
尚不清楚如何理解这种行为。自然会产生以下

questions

    此文件记录在某处吗?
  • 两个对象如何具有与'left'相同的轴,但是该轴仅具有当前对象作为'right'
  • 为什么'parent'也根据当前对象是哪个而改变?
matlab graphics matlab-figure
1个回答
0
投票
对我来说,'children'似乎在做一些令人讨厌的幕后操作,并且有很多我们无法访问的隐藏数据。

'YAxisLocation'确实说:

yyaxis激活当前与左侧y轴关联的一侧。随后的图形命令以左侧为目标。

documentation对象的yyaxis left属性仅包含活动侧的子代。要访问双方的所有子代,请使用Children功能。

因此,用Axes更改“一侧”会更改allchild对象的内容,我认为另一侧的内容会存储在我无法找到的某个隐藏位置中。 yyaxis是P代码,所以我们无法弄清楚它到底在做什么。

这很有趣:

Axes

代码创建具有不同限制的左轴和右轴。我们将手柄置于轴上,向左更改,从手柄上读取限制,然后向右更改并再次读取相同的属性。第一次返回yyaxis,第二次返回figure
yyaxis left
hl = plot([0 10],[0 1],'-');
yyaxis right
hr = plot([0 10],[100 0],'--');

h = gca;

yyaxis left
h.YLim

yyaxis right
h.YLim
。也就是说,当我们调用[0,1]时,带有句柄[0,100]Axes对象会更改。

[我发现h指向具有两侧的轴的唯一指示是yyaxis返回h对象的两个句柄,每侧一个。


我不能不觉得这是尴尬的行为。我本来希望有两个h.YAxis对象,它们都具有相同的NumericRuler属性,并且可能带有使两个对象保持同步的侦听器。
© www.soinside.com 2019 - 2024. All rights reserved.