【问题标题】:Manipulating bar3 x-Axis values results into hollow barplot操作 bar3 x 轴值会导致空心条形图
【发布时间】: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


【解决方案1】:

请注意,the answer to the related question 专门设计用于处理 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));

还有剧情:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多