matlab - 操作 bar3 x 轴值会导致空心条形图
问题描述
我正在设置一个bar3
绘图并操纵 X 轴值,因为没有更好的方法可以做到这一点。我仔细阅读了 Ander Biguri 在他对这个线程的回答中提供的代码:如何在 Matlab 中使用 bar3 时设置 x 和 y 值?.
事实证明,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},未处理的数据在矩阵的左侧和右侧之间始终相差 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 值是连续整数(即 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));
和情节:
推荐阅读
- javascript - 有没有办法将条件语句从文本变为 if 语句?
- python - Pandas groupby concat 将未分组的列转换为逗号分隔的字符串
- python - 参数必须是字符串或数字 [标签编码]
- swift - 如何在终端中打印字符串索引
- python - 如果两者在python中具有相同的变量,如何仅迭代矩阵数组的一个参数?
- asp.net-mvc - 如何在配置位于“核心”项目中的项目上附加 Swagger 配置?
- ios - Swift - 在特定时间处理和通知
- java - 为什么 SpringBoot 从 2.3.0 升级到 2.5.0 无法启动 tomcat 并出现 Prometheus 异常?
- makefile - 无法覆盖特定于目标的变量
- javascript - 取消选中Angular 6中的单选按钮