首页 > 解决方案 > 操作 bar3 x 轴值会导致空心条形图

问题描述

我正在设置一个bar3绘图并操纵 X 轴值,因为没有更好的方法可以做到这一点。我仔细阅读了 Ander Biguri 在他对这个线程的回答中提供的代码:如何在 Matlab 中使用 bar3 时设置 x 和 y 值?.

事实证明,X 轴值很好,但不在边界处的条形是原型形状的。可能它与数据操作有关。

这是对应的情节:

bar3 带空心条的绘图

我用于此示例的数据:

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},未处理的数据在矩阵的左侧和右侧之间始终相差 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

我怎样才能让酒吧再次出现实心?我猜数据操作是错误的。谢谢你的帮助!问候

标签: matlabmatlab-figure

解决方案


请注意,相关问题的答案专门用于处理您的 x 值是连续整数(即 bin 宽度为 1)的情况。您的情况更普遍,bin 宽度为 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));

和情节:

在此处输入图像描述


推荐阅读