如何用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
相关产品推荐
相关产品推荐

