如何在Matlab中为XTICK的不完整标签设置非零符号?

如何在Matlab中为XTICK的不完整标签设置非零符号?,matlab,calibration,Matlab,Calibration,我遇到了这样一个问题:当x轴变得更大时,Matlab2015b通过在线程中使用不完整的标签零来扩展新XTICK的标签 XTICK不完整标签的动态扩展是不可能的,因为总是存在空间不足的情况,但只需要一个符号来标记两个值之间的一半。 零的情况是有问题的,因为我有几个校准点和几个系统,这些额外的零容易出错。 我想要另一个符号 示例代码如何创建那些不完整的XTICK标签 labels = arrayfun(@(x)sprintf('%.2g', x), xticks, 'uniform', 0); a

我遇到了这样一个问题:当x轴变得更大时,Matlab2015b通过在线程中使用不完整的标签零来扩展新XTICK的标签

XTICK不完整标签的动态扩展是不可能的,因为总是存在空间不足的情况,但只需要一个符号来标记两个值之间的一半。 零的情况是有问题的,因为我有几个校准点和几个系统,这些额外的零容易出错。 我想要另一个符号

示例代码如何创建那些不完整的XTICK标签

labels = arrayfun(@(x)sprintf('%.2g', x), xticks, 'uniform', 0);
ax2 = axes('OuterPosition', [0.51 0.5 0.5 0.5]); % anything here
xticks = get(ax2, 'xtick'); % https://stackoverflow.com/a/35776785/54964
set(ax2, 'xticklabels', labels); % here the point!
没有那些不完整的xticks标签,但更广泛的标签是更糟糕的

labels = arrayfun(@(x)sprintf('%.2g', x), xticks, 'uniform', 0);
ax2 = axes('OuterPosition', [0.51 0.5 0.5 0.5]);
xticks = get(ax2, 'xtick'); % https://stackoverflow.com/a/35776785/54964
set(ax2, 'xtick', xticks, 'xticklabels', labels);
Suever的产量 美观原始大小的小窗口,带有科学编号,因为
callback()在以下代码的末尾

中窗

代码



在Matlab中,如何为xticks的不完整标签添加另一个符号?

正如我在另一个问题中所说的,如果希望在调整大小时自动更新标签,则需要执行以下操作

fig = figure;

% Set large xlimits to demonstrate the issue at hand
ax2 = axes('xlim', [0 1e9]);

% Force a draw event to have the axes determine where the
labelconverter = @(x)sprintf('%.2g', x);
callback = @(varargin)set(ax2, 'xticklabels', arrayfun(labelconverter, get(ax2, 'xtick'), 'uniform', 0));

set(fig, 'SizeChangedFcn', callback);

% Be sure to execute the callback to get new labels prior to figure resize.
callback();
更改体形大小时,标签将自动更改,位置也将更新

小窗口

中等窗口

大窗口

注意:单独测试此代码以验证其是否有效,然后根据您的解决方案调整想法。由于名称空间被污染,您似乎会遇到很多麻烦(例如,您的示例甚至没有运行,因为
标签
没有定义)


这里的问题是,您必须在获取记号位置和标签之前绘制轴。因此,1)绘制轴2)现在绘制3)获取xticks 4)从xticks创建标签5)设置xticklabels。您也可以使用我在下面提供的动态答案。@Masi是原始大小的小窗口吗?如果是这样的话,您可能需要在绘制完所有内容后调用
callback()
,因为此时,在图形大小改变之前,您不会进行修改。@Masi Dude请停下来呼吸。我不是说你应该使用那些XLIM。我的回答很笼统,用来证明我想表达的观点。它不会直接复制/粘贴到您的解决方案中。发帖前请考虑一下。谢谢。是的,你说得对!添加
callback()到底解决了这个问题。非常感谢。
fig = figure;

% Set large xlimits to demonstrate the issue at hand
ax2 = axes('xlim', [0 1e9]);

% Force a draw event to have the axes determine where the
labelconverter = @(x)sprintf('%.2g', x);
callback = @(varargin)set(ax2, 'xticklabels', arrayfun(labelconverter, get(ax2, 'xtick'), 'uniform', 0));

set(fig, 'SizeChangedFcn', callback);

% Be sure to execute the callback to get new labels prior to figure resize.
callback();