2

我需要在 MATLAB 中显示一个条形图,其中XTicks 将由标签的单元格数组标记。截至目前,我XTickLabel在图底部沿 x 轴显示 s,但由于图中有大量条形,我想使用数据工具,这样当我选择特定条形时,对应的XTickLabel应该显示为它的X坐标而不是它的数字索引。

一个简单的例子是:

x=[1 2 3];
xd={'a','b','c'};
bar(x);
set(gca,'ylim',[0,5],'xticklabel',xd);

我想要的地方

X = a
Y = 1

在结果图中选择第一个栏时显示。

帮助将不胜感激!

PS 默认情况下,我不希望在条形顶部显示标签。

4

1 回答 1

2

进入数据光标模式并选择一个条形图。

现在右键单击数据点,然后从菜单中选择“编辑文本更新功能...”。

在此处输入图像描述

修改函数如下:

function output_txt = myfunction(obj,event_obj)
    pos = get(event_obj, 'Position');
    lab = get(gca, 'XTickLabel');
    if isa(lab,'double')
        lab = arrayfun(@(x){num2str(x)},lab);
    end
    output_txt = {['X: ', lab{pos(1)}], ['Y: ', num2str(pos(2),4)]};
end

首先,这会获取一组 xticklabels 并将它们存储在lab.

然后它检查它们是否实际上是双精度数,而不是字符串单元数组,并在必要时转换它们。

最后它显示正确标签的文本。

将回调另存为myfunction.m,您应该是金色的:

在此处输入图像描述

如果您想以编程方式执行此操作,则需要获取相关图形的数据游标管理器。像这样的东西应该工作:

>> bar([1,2,3])
>> dcm = datacursormode(gcf);
>> set(dcm, 'UpdateFcn', @(a,b) {'Hello', 'World'})

其中第三个参数set是要用于设置文本的函数的句柄(例如,@myfunction如果您将前一个函数保存为 ,则可以使用myfunction.m)。这给了你这样的东西:

在此处输入图像描述

于 2013-03-14T10:35:30.513 回答