You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用bar()正向绘制全负值10×3矩阵且保持y轴刻度不变?

解决MATLAB全负矩阵条形图正向显示且保留原y轴刻度的问题

嘿,我来帮你搞定这个条形图的小问题!你的需求很明确:全负的10×3矩阵用bar(y)画出来是倒置的,要让条形正向显示,同时保持原y轴刻度(-95到-50),让-50对应的条形最高、-90的最短。其实核心思路就是调整条形图的基底位置,让条形从y轴最低刻度往上延伸,而不是默认的从0往下画。

完整实现代码

% 定义原始全负矩阵
y = [-56 -58 -60; 
     -75 -74 -72; 
     -66 -66 -69; 
     -67 -69 -71; 
     -66 -67 -71; 
     -59 -58 -57; 
     -69 -71 -69; 
     -59 -58 -58; 
     -66 -67 -68; 
     -75 -73 -72];

% 设置y轴最低刻度作为条形的基底
base_val = -95;

% 绘制条形图:用原数值减去基底得到正向高度,同时指定基底位置
bar(y - base_val, 'BaseValue', base_val);

% 固定y轴范围,和原图表一致
ylim([base_val, -50]);

% 设置y轴刻度,保持原有的间隔(比如每5个单位一个刻度)
yticks(base_val:5:-50);

% 可选:添加标题和轴标签,让图表更清晰
title('正向显示的全负矩阵条形图');
xlabel('样本索引');
ylabel('数值');

代码细节解释

  • 调整条形高度:因为原矩阵所有值都是负数,我们用y - base_val计算出每个条形的高度——比如原数值是-50,减去基底-95得到45,这就是从-95往上延伸到-50的高度;而-90的话,计算后得到5,对应的条形就会很短,完美符合你“-50最高、-90最短”的要求。
  • 指定基底位置:bar函数的'BaseValue'参数可以设置条形的起始位置,这里设为-95,让所有条形都从y轴最低端开始往上画,自然就正向显示了。
  • 保留原y轴刻度:通过ylim固定轴范围,yticks设置刻度间隔,确保显示的刻度和原图表完全一致,不会因为数值转换而改变。

这样处理后,你得到的就是正向的条形图,同时y轴依然显示-95到-50的负刻度,完全满足需求~

内容的提问来源于stack exchange,提问作者Mohsen Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:20:23