【发布时间】:2018-07-30 14:22:29
【问题描述】:
我正在设置一个bar3 绘图并操纵 X 轴值,因为没有更好的方法可以这样做。我仔细阅读了 Ander Biguri 在他对这个线程的回答中提供的代码:How to set x and y values when using bar3 in Matlab?。
事实证明,X 轴值很好,但不在边界处的条形是原型形状的。可能与数据操作有关。
下面是对应的情节:
我在这个例子中使用的数据:
klasse_sig_a=[70 82 94 106 118 130 142 154 166 178 190];
klasse_sig_m=[-120 -102 -84 -66 -48 -30 -12 6 24 42 60];
RFMatrix=
[2 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 1 0 0;
0 0 0 0 2 0 0 0 0 2;
0 0 0 0 1 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0;
0 0 0 0 2 0 0 0 0 0;]
我的代码:
b=bar3(klasse_sig_m(2:end),RFMatrix,1);
xlabel('\sigma_a [MPa]')
ylabel('\sigma_m [MPa]')
zlabel('N [-]')
axis tight
for k = 1:length(b)
zdata = b(k).ZData;
b(k).CData = zdata;
b(k).FaceColor = 'interp';
end
Xdat=get(b,'XData');
diff=klasse_sig_a(2)-klasse_sig_a(1);
ONEMAT=ones(size(Xdat{1},1),size(Xdat{1},2)/2);
for ii=1:length(Xdat)
MAT=(Xdat{ii}-0.5);
if ii==1
MAT=MAT+[ONEMAT*min(klasse_sig_a) ONEMAT*(min(klasse_sig_a)+diff)-ii];
MAT_VOR=MAT(:,3:4);
else
MAT(:,1:2)=MAT_VOR;
MAT(:,3:4)=MAT(:,3:4)+ONEMAT*(min(klasse_sig_a)+ii*diff)-ii;
MAT_VOR=MAT(:,3:4);
end
Xdat{ii}=MAT;
set(b(ii),'XData',Xdat{ii});
end
set(gca,'XTick', klasse_sig_a(1:2:end))
set(gca,'YTick', klasse_sig_m(1:2:end))
我注意到每个 xdata{ii}
... ... ... ...
NaN NaN NaN NaN
NaN 0.5000 1.5000 NaN
0.5000 0.5000 1.5000 1.5000
0.5000 0.5000 1.5000 1.5000
NaN 0.5000 1.5000 NaN
NaN 0.5000 1.5000 NaN
NaN NaN NaN NaN
当设置我自己的数据时,差异变得更大,条形图变得空心
... ... ... ...
NaN 70 82 NaN
70 70 82 82
70 70 82 82
NaN 70 82 NaN
NaN 70 82 NaN
NaN NaN NaN NaN
如何使条形再次显示为实心?我猜数据操作是错误的。 谢谢你的帮助! 问候
【问题讨论】:
-
"... 操纵 X 轴值,因为没有更好的方法可以这样做" 什么是“so”?请注意,Ander 在 2015 年的回答是针对旧版本的 MATLAB,在引入称为“HG2”的新图形系统之前。使用最新的 MATLAB 版本应该有不同的方法。请解释一下你想要达到的目的是什么给了你这些空心棒!
-
感谢您的回答。我试图设置自己的 X 轴值,请参阅
klasse_sig_a。由于 bar3 仅绘制 (Y,Z) X 轴只能通过操作设置。到目前为止,我还没有看到更好的方法,甚至在我的 matlab 版本中也没有。我正在使用 2016a。 -
是的,该代码是旧的。现在可能有更好的方法。
-
呃。 3D 条形图。结合两全其美......:p如果您分享数据可视化的目标,我可能会提出更好的选择。
标签: matlab matlab-figure