[使用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'
属性列出仅一个对象,即当前对象或最后绘制的对象。'children'
之间的轴[[动态改变的['YAxisLocation'
属性]。同样,这由当前对象或最后绘制的对象确定。questions
:'left'
相同的轴,但是该轴仅具有当前对象作为'right'
?'parent'
也根据当前对象是哪个而改变?'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
属性,并且可能带有使两个对象保持同步的侦听器。