تؤدي معالجة قيم bar3 X-Axis إلى barplot مجوف

1

أقوم بإعداد bar3 رسم قيم المحور X ومعالجتها نظرًا لعدم وجود طريقة أفضل للقيام بذلك. ذهبت من خلال الرمز الذي قدمه Ander Biguri في إجابته على هذا الموضوع: كيفية تعيين قيم x و y عند استخدام bar3 في Matlab؟ .

اتضح أن قيم المحور X جيدة ولكن الأشرطة غير الموجودة على الحدود هي شكل نموذجي. ربما يتعلق الأمر بمعالجة البيانات.

هنا مؤامرة الترابط:

Imagen 204

البيانات التي استخدمتها في هذا المثال:

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))

لاحظت أن البيانات غير المُعالجة لها دائمًا اختلاف 1 بين الجانب الأيسر والأيمن من المصفوفة لكل 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

كيف يمكنني جعل الأشرطة تبدو صلبة مرة أخرى؟ أعتقد أن معالجة البيانات خاطئة. شكرا على اي مساعدة! مع تحياتي

1 إجابة

2
افضل جواب

لاحظ أن الإجابة على السؤال ذي الصلة مصممة خصيصًا للتعامل مع الحالة عندما تكون قيم 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));

والمؤامرة:

Imagen 689518

:مؤلف
فوق
قائمة طعام