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

时间:2015-03-11 15:54:02

标签: 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');

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

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

How can I adjust 3-D bar grouping and y-axis labeling in MATLAB?

我尝试过的其他事情

当我尝试用以下内容更改xvals时:

set(gca,'XTick', xVals)
set(gca,'YTick', yVals)

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

注意添加

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

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

1 个答案:

答案 0 :(得分:5)

我找到了一种方法。我会给你一段代码,然后你需要“整理”,主要是轴限制和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]) 

enter image description here

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

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