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

标签 matlab matlab-figure

快速版

如何在 Matlab 中控制 3 维条形图的 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)

输入了值,但实际上显示在错误的轴上,因此似乎使用 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]) 

enter image description here

注意:Y 看起来不同,但实际上不是。

正如您现在看到的,X 值就是您想要的值。如果您想要它们之间的间隔不是 1 的其他大小,则需要更改代码,但您可以猜出可能性有多大!

关于matlab - 在 Matlab 中使用 bar3 时如何设置 x 和 y 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28991376/

相关文章:

matlab - 为什么 Matlab 和 Mathematica 之间存在显着的 double 差异?

matlab - 如何在Matlab中手动分割和标记图像中的ROI?

matlab - 在 Matlab R2014b+ (HG2) 上获得可靠的渲染

matlab - 在 Matlab 中计算 opencv 的透视变换时出错

matlab - 不带计数器的自定义周期函数

image - 将 2 个直方图数据组合为 OpenCV 中的新数据

algorithm - 如何在matlab中找到图像的动态中心点?

matlab - 如何在 Matlab 中创建带标题的空表

matlab - 在 matlab 中填充顶部和底部的圆柱体

创建图形时 MATLAB 自动缩放到特定点