在Matlab中使用bar3时如何设置x和y值?

eri*_*ric 10 matlab matlab-figure

快速版

如何在Matlab中控制三维条形图的x值和y值?

细节

假设我们有一个10 x 20的数据矩阵,我们使用它绘制它bar3,我们想要设置x值和y值.例如:

foodat = rand(10,20);
xVals = [5:14];
yVals = [-3:16];
bar3(xVals, foodat);
xlabel('x'); ylabel('y');
Run Code Online (Sandbox Code Playgroud)

有没有办法把它喂给yVals?否则,y轴始终默认为[1:N].

注意我不只是想用和更改标签.我需要更改轴上的实际,因为我在同一个图中绘制了多个东西.仅仅改变(错误的)轴刻度标记的方式是不够的.所以这与这样的问题不同:XTickLabelYTickLabel

如何在MATLAB中调整三维条形分组和y轴标记?

我尝试过的其他事情

当我尝试更改xvals时:

set(gca,'XTick', xVals)
set(gca,'YTick', yVals)
Run Code Online (Sandbox Code Playgroud)

这些值被接收,但实际上显示在错误的轴上,所以看起来x和y轴使用bar3切换.另外,由于条形图已经用错误的x值和y值绘制,所以为时已晚,因此我们最终会给空值给出刻度.

注意补充说

Matlab技术支持只是通过电子邮件通知我,让我知道用户贡献的功能scatterbar3,它以我想要的方式完成,其方式与接受的答案不同:

http://www.mathworks.com/matlabcentral/fileexchange/1420-scatterbar3

And*_*uri 6

我找到了一种方法.我会给你一段代码,然后你需要"整理",主要是轴限制和Xticks,就像bar3在里面设置Xticks一样,所以如果你想要别人,你需要自己手动设置它们.

所以这里的技巧是从bar3句柄获取Xdata.这里的事情是,似乎每行数据都有一个句柄,因此您需要为每个行迭代.这是具有当前输出的代码:

foodat = rand(20,10);
xVals = [5:14];
yVals = [-3:16];


% The values of Y are OK if called like this.
subplot(121)
bar3(yVals, foodat); 

subplot(122)
h=bar3(yVals, foodat); 
Xdat=get(h,'XData');
axis tight
% Widdth of barplots is 0.8
for ii=1:length(Xdat)
    Xdat{ii}=Xdat{ii}+(min(xVals(:))-1)*ones(size(Xdat{ii}));
    set(h(ii),'XData',Xdat{ii});
end



axis([(min(xVals(:))-0.5) (max(xVals(:))+0.5) min(yVals(:))-0.5, max(yVals(:))+0.5]) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

注意:Y看起来不同但不是.

正如您现在所看到的,X值是您想要的值.如果你想要它们之间的间隔大于1,你需要更改代码,但你可以猜测可能!