我看到 BodePlot 的另一个问题(V 8.0 中的新功能)。我想我在这里问是否有人能看到我没有看到的东西。
我知道从诸如绘图之类的对象中提取选项的正常方法是使用AbsoluteOptions
,如下所示:
p=Plot[Sin[x],{x,0,2Pi}];
AbsoluteOptions[p,AxesOrigin]
哪个返回
{AxesOrigin -> {0., 0.}}
尝试对 BodePlot 做同样的事情,唯一的技巧是 BodePlot 默认是返回 Grid,所以必须告诉它返回绘图图像,而不是使用一个名为 的新选项PlotLayout -> "List"
,它将在一个列表中返回 2 个绘图(幅度和相位)。然后可以AbsoluteOptions
在两个图中的任何一个上使用,就像上面的例子一样。
在此示例中,我选择了两者中的第一个图,即幅度,仅用于测试,如果使用第二个图(相位),则会出现相同的错误:
Clear[z]
hz=z/(z^2-z+0.3);
tf=TransferFunctionModel[hz,z,SamplingPeriod->2]
p=BodePlot[tf,PlotLayout->"List"][[1]]
到目前为止,一切都运行良好。情节很好。
现在问题来了,我想找到一个选项的值,就像我在顶部的 Plot 示例中所做的那样,所以我输入了
AbsoluteOptions[p,AxesOrigin]
即使返回了正确的答案
{AxesOrigin -> {-2.803880122969847, -7.234556720270532}}
问题是控制台上同时打印了许多内核错误:
Ticks::ticks: {At Line = 77, the input was:,AbsoluteOptions[p,AxesOrigin],
{{{-5.,-5.,{0.0125,0.},{GrayLevel[0.],AbsoluteThickness[0.25]}},<<33>>,{<<1>>}},
{<<1>>}}} is not a valid tick specification. >>
我尝试了上面最小的示例,因此,我不知道为什么会出现上述错误。我尝试了许多其他事情,例如告诉它使用 Automatic FrameTicks
:
Clear[z]
hz=z/(z^2-z+0.3);
tf=TransferFunctionModel[hz,z,SamplingPeriod->2]
p=BodePlot[tf,PlotLayout->"List",FrameTicks->Automatic][[2]]
AbsoluteOptions[p,AxesOrigin]
但我无法摆脱这些错误。我感觉 BodePlot 在某个地方有问题,但不确定,因为我自己可能做错了什么。
任何人都知道如何在 BodePlot 上使用 AbsoluteOptions 而不会出现这些错误?
谢谢
更新:
我刚刚发现了解决此问题的方法。尝试不同的东西,我发现可以使用 BodePlot 的非框架布局。默认值为 Frame->True。但是当我尝试 Frame->False 时,问题就消失了:
Clear[z]
hz=z/(z^2-z+0.3);
tf=TransferFunctionModel[hz,z,SamplingPeriod->2]
p=BodePlot[tf,PlotLayout->"List",Frame->False][[1]]
AbsoluteOptions[p,Ticks]
没有错误,现在返回实际的刻度。因此,如果有人想使用 BodePlot,可能使用 Frame->False 是一种选择。无论如何,我实际上并不喜欢原始的框架布局,并且由于在这种情况下轴的显示方式,我更喜欢标准绘图。