[英]How to set x and y values when using bar3 in Matlab?
快速版本
如何在Matlab中控制3维条形图的x和y值?
细节
假设我们有一个10 x 20的数据矩阵,并使用bar3
对其进行bar3
,并且我们想要设置x和y值。 例如:
foodat = rand(10,20);
xVals = [5:14];
yVals = [-3:16];
bar3(xVals, foodat);
xlabel('x'); ylabel('y');
有没有办法也向它提供yVal? 否则,y轴始终默认为[1:N]。
注意我不只是想使用XTickLabel
和YTickLabel
更改标签 。 我需要更改轴上的实际值 ,因为我在同一张图中绘制了许多东西。 仅更改(错误的)轴刻度标记的方式是不够的。 因此,这不同于以下问题:
我尝试过的其他东西
当我尝试使用以下方法更改xvals时:
set(gca,'XTick', xVals)
set(gca,'YTick', yVals)
值已被接受,但实际上显示在错误的轴上,因此似乎使用bar3切换了x和y轴。 另外,无论如何都为时已晚,因为条形图已经使用错误的x值和y值进行了绘制,因此我们最终会给空值打勾。
注意已添加
Matlab技术支持刚刚通过电子邮件发送给我,让我了解了用户贡献的功能scatterbar3
,它以与接受的答案不同的方式实现了我想要的功能:
http://www.mathworks.com/matlabcentral/fileexchange/1420-scatterbar3
我找到了一种方法。 麻烦给您一段代码,然后您需要“整理”,主要是轴限制和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以外的其他大小,则需要更改代码,但您可以猜测可能的大小!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.