从图中删除单位

时间:2013-11-30 16:15:23

标签: matlab plot matlab-figure

我尝试从这个图中删除Matlab给定的单位,但我找不到方法:

figure(1)
hold on
set(gcf,'PaperUnits','centimeters',...
        'PaperSize',[15 9],...
        'PaperPosition',[0 0 15 9]);
pzmap(LB); sgrid; grid on; axis equal;
title('');
xlabel('\sigma [rad/s]')
ylabel('\omega [rad/s]')
hold off

在此命令之后,xlabel看起来像这样:\sigma [rad/s] (seconds^-1)。秒数来自pzmap。我该如何删除它们?


我发现了一些奇怪的行为: 如果由图形图管理器生成代码,我得到:

% Create xlabel
xlabel('\sigma [rad/s] (seconds^{-1})','Units','pixels');

为什么???


现在我明白了 - 没有pzmap / pzplot

pol = pole(sys)

figure(1)
plot(real(pol(:)),imag(pol(:)),'x')
title('');
xlabel('\sigma [rad/s]');
ylabel('\omega [rad/s]');
sgrid

2 个答案:

答案 0 :(得分:1)

pzmap是一个高级便利功能,但它不是最好的选择(它也存储在R2013a的过时功能文件夹中,所以它可能会被标记为将来正式删除)。相反,让我们直接使用pzplot创建一个示例图,而不是pzmap。这仍然是一个情节功能,在幕后做了很多,但它返回一个句柄h到情节:

sys = rss(3,2,2);
h = pzplot(sys);
sgrid;
axis equal;

我们可以通过pzplotgetoptions

的选项进行操作
p = getoptions(h)

要根据需要设置标签和单位,可以尝试使用setoptions

p.Title.String = '';
p.XLabel.String = '\sigma';
p.YLabel.String = '\omega';
setoptions(h,p);

我相信绘图显示的'seconds -1 '的单位等于你想要指定的'rad / s'。我知道这两个看起来非常不同(我更喜欢我自己对弧度的具体说法),但是使用这样的情节函数试图为你做一切都是不利的。如果您想删除默认字符串或添加其他选项,则可能需要执行一些低级别的黑客攻击。一种更简单的方法,可能是在图形工具栏的“文件”菜单下使用“Generate Code...”命令(“旧版本中的”生成M文件...“)并编辑那里的图标(这个on the File Exchange也有一个编程选项。或者你可以输出到postscript并编辑它。

或者,您可以使用pzoptions创建要传递给pzplotpzmap的选项列表(在后一种情况下未记录):

p = pzoptions;
p.Title.String = '';
p.XLabel.String = '\sigma';
p.YLabel.String = '\omega';
sys = rss(3,2,2);
pzplot(sys,p);
sgrid;
axis equal;

在这种情况下,您会看到由于某种原因,文本大小要小得多。 pzplotpzmap必须将字体大小设置为10。你可以很容易地做到这一点。

更多关于自定义此操作和相关控件工具箱图的信息,see this article

答案 1 :(得分:0)

经过激烈的低级挖掘后,实际上有一种非常简单的方法来覆盖默认行为。

p = pzplot(sys);
p.AxesGrid.XUnits = 'rad/s';
p.AxesGrid.YUnits = 'rad/s';

更改似乎立即生效。我甚至尝试将值设置为空,即

p.AxesGrid.XUnits = '';

它有效地删除了单位烦人的括号。从技术上讲,matlab创建了一个自定义类元素,它们在resppack.mpzplot类实例中以AxesGrid的名称存储,具有一些标准的LTI行为。你可以通过“注入”一个与标准库函数同名的脚本来解决一些问题,这样它就会被调用,然后在那里改变一些东西,但这是我最接近删除它们的东西。烦恼的单位在几行。

作为辅助信息,初始化AxesGrid对象     ... \ controllib \图形\ @resppack \ @pzplot \ initialize.m 如果你想看看它。