快速版
如何在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]。
注意我不只是想使用XTickLabel
和YTickLabel
更改标签。我需要更改轴上的实际值,因为我在同一个图中绘制了多个内容。仅仅改变(错误的)轴刻度标记的方式是不够的。所以这与这样的问题不同:
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
答案 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])
注意:Y看起来不同但不是。
正如您现在所看到的,X值是您想要的值。如果你想要它们之间的间隔大于1,你需要更改代码,但你可以猜测它的可能性!