如何在 Matlab 中为 XTicks 的不完整标签设置非零符号?
Posted
技术标签:
【中文标题】如何在 Matlab 中为 XTicks 的不完整标签设置非零符号?【英文标题】:How to Have Non-Zero Symbol for Incomplete Labels of XTicks in Matlab? 【发布时间】:2016-03-03 18:04:29 【问题描述】:我遇到的问题是,当 x 轴变大时,Matlab 2015b 在线程 No Gap Next to Axis Label in Matlab? 中使用不完整的标签零来扩展新 Xticks 的标签
xticks 不完整标签的动态扩展是不可能的,因为总是存在空间不足但只需要一个符号来标记两个值之间的一半的情况。 零点的情况是有问题的,因为我有几个校准点和几个系统,其中额外的零点容易出错。 我想有另一个符号。
示例代码如何创建不完整的 xticks 标签
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://***.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://***.com/a/35776785/54964
set(ax2, 'xtick', xticks, 'xticklabels', labels);
Suever 的answer 的输出
漂亮原始大小的小窗口,科学编号,因为callback();
在后面的代码末尾
中等窗口
代码
hFig=figure;
data=randi(513,513);
D=mat2gray(pdist(data, 'correlation'));
ax2 = axes('OuterPosition', [0.51 0.5 0.5 0.5]);
plot(D, 'Parent', ax2);
axis(ax2, 'square');
title('Corr pdist');
cbar2 = colorbar();
set(ax2, 'XLim', [0 size(D,2)]);
set(cbar2, 'Visible', 'off')
grid minor;
labelconverter = @(x)sprintf('%.2g', x); % https://***.com/a/35780915/54964
callback = @(varargin)set(ax2, 'xticklabels', arrayfun(labelconverter, get(ax2, 'xtick'), 'uniform', 0));
set(hFig, 'SizeChangedFcn', callback);
callback(); % necessary for small window
Matlab 中 xticks 的不完整标签怎么能有另一个符号?
【问题讨论】:
这里的问题是,您必须先绘制轴,然后才能获取刻度位置和标签。所以 1)绘制轴 2)drawow 3)获取 xticks 4)从 xticks 创建标签 5)设置 xticklabels。您也可以使用我在下面提供的动态答案。 【参考方案1】:正如我在另一个问题中所说,如果您希望在调整大小时自动更新标签,您需要执行以下操作。
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();
当您更改图形的大小时,标签将自动更改并且位置将更新。
小窗口
中等窗口
大窗口
注意:单独测试此代码以验证其是否有效,然后根据您的解决方案调整想法。看起来您最终会遇到很多复杂情况,因为您的命名空间已被污染(例如,您的示例甚至无法运行,因为未定义
labels
)。
【讨论】:
@Masi 小窗口是原始大小吗?如果是这样,您可能需要在绘制完所有内容后调用callback()
,因为此时,您不会进行修改直到图形的大小发生变化。
@Masi Dude 请停下来呼吸。我不是说你应该使用那些xlims。我的回答是general,用来证明我想要表达的观点。它不会是您的解决方案的文字复制/粘贴。发帖前请先思考一下。谢谢。
是的,你是对的!在末尾添加callback();
即可解决问题。谢谢!以上是关于如何在 Matlab 中为 XTicks 的不完整标签设置非零符号?的主要内容,如果未能解决你的问题,请参考以下文章