Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将bar3 x轴值操纵到空心条形图中_Matlab_Matlab Figure - Fatal编程技术网

Matlab 将bar3 x轴值操纵到空心条形图中

Matlab 将bar3 x轴值操纵到空心条形图中,matlab,matlab-figure,Matlab,Matlab Figure,我正在设置一个bar3绘图,并操纵X轴值,因为没有更好的方法。我仔细阅读了Ander Biguri在回答这个问题时提供的代码: 结果表明,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= [

我正在设置一个
bar3
绘图,并操纵X轴值,因为没有更好的方法。我仔细阅读了Ander Biguri在回答这个问题时提供的代码:

结果表明,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))
我注意到,对于每个扩展数据{ii},非操纵数据在矩阵的左侧和右侧之间总是有1的差值

   ...       ...       ...       ...
   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值为连续整数(即箱子宽度为1)的情况而设计的。您的箱子更一般,箱子宽度为12。这需要稍微不同的逻辑。我能够通过以下代码获得您想要的结果:

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)
  xData = b(k).XData;
  zData = b(k).ZData;
  set(b(k), 'XData', (xData-k).*diff(klasse_sig_a(k:(k+1)))+klasse_sig_a(k), ...
            'CData', zData, 'FaceColor', 'interp');
end

set(gca, 'XTick', klasse_sig_a(1:2:end), 'YTick', klasse_sig_m(1:2:end));
情节是:


“…操纵X轴值,因为没有更好的方法”什么是“如此”?请注意,Ander在2015年的回答是针对MATLAB的旧版本,在新的图形系统“HG2”被引入之前。对于最新的MATLAB版本,应该有一种不同的方法来实现这一点。请解释一下你想要达到的目标是什么,它给了你这些空心棒!谢谢你的回答。我试图设置自己的X轴值,请参见
klasse\u sig\u a
。由于bar3仅打印(Y,Z),因此只能通过操纵来设置X轴。到目前为止,我还没有看到更好的方法,甚至在我的matlab版本中也没有。我用的是2016a.yes,那代码很旧了。也许现在有更好的办法。三维条形图。将两个世界中最糟糕的结合起来…:p如果你和我一样有数据可视化的目标,我可能会建议一个更好的选择。