网站首页 > 技术文章 正文
前面介绍过MATLAB如何绘制双y轴图形,为了节省论文里面的图形的数量,可以将类型相同的图绘制在一起,或者将要进行比较的结果数据进行处理。但是对于柱形图而言,当绘制图像的数据差距过大,数据小的图形的图像很短。今天主要介绍MATLAB 绘制双y轴的柱状图实例加程序。
例如要处理如下的数据,绘制柱形图进行对比分析。
data1 =[4201.9842 3702.1587 4089.4364 4141.2310 3977.6403 3679.8192]';
data2 = [ 0.5370 0.5776 0.5698 0.5494 0.5627 0.5826]';
data3 = [2.5475 2.0062 2.2437 2.3446 2.2953 2.1852]';
由数据分析得,三组数据的数量级差距较大,单个绘制出来的效果如图,其余两个柱形图差距较大,基本在图形上没有显示。
程序
clc;%清除命令行窗口
clear all;%清除工作区变量
close all;%关闭图形窗口
%加载数据
data1 =[4201.9842 3702.1587 4089.4364 4141.2310 3977.6403 3679.8192]';
data2 = [ 0.5370 0.5776 0.5698 0.5494 0.5627 0.5826]';
data3 = [2.5475 2.0062 2.2437 2.3446 2.2953 2.1852]';
data4 = zeros(6,1);
%绘制图像
set(0,'DefaultFigureVisible','on');
c = categorical({'Reference scenario','Scenario 1','Scenario 2','Scenario 3','Scenario 4','Scenario 5'});
h1=bar(c,[ data1 data2 data2]);
set(h1(1),'facecolor','r','LineStyle',':');
set(h1(2),'facecolor','b','LineStyle',':');
set(h1(3),'facecolor','k','LineStyle',':');
grid on;
grid minor;
legend({'Total cost','MDI','PGSI'},'Location','northeast','NumColumns',3,'box','on');
set(gca,'FontSize',11);
1.初步解决方法
我们可以尝试绘制双y轴图形,分开绘制图像的柱形图,可以参考往期绘制双y轴图形的方式尝试写程序,运行结果如图:
程序
clc;%清除命令行窗口
clear all;%清除工作区变量
close all;%关闭图形窗口
%加载数据
data1 =[4201.9842 3702.1587 4089.4364 4141.2310 3977.6403 3679.8192]';
data2 = [ 0.5370 0.5776 0.5698 0.5494 0.5627 0.5826]';
data3 = [2.5475 2.0062 2.2437 2.3446 2.2953 2.1852]';
%绘制图像
set(0,'DefaultFigureVisible','on');
g=figure;
left_color=[0 0 0];
right_color=[0 0 0];
set(g,'defaultAxesColorOrder',[left_color; right_color]);
yyaxis left
c = categorical({'Reference scenario','Scenario 1','Scenario 2','Scenario 3','Scenario 4','Scenario 5'});
h1=bar(c,[ data1 ]);
set(h1(1),'facecolor','r','LineStyle',':');
ylabel('Cost');
ylim([0 5000]);
grid on;
grid minor;
yyaxis right
h2=bar(c,[ data2 data3]);
set(h2(1),'facecolor','b','LineStyle',':');
set(h2(2),'facecolor','k','LineStyle',':');
ylim([0 3]);
legend({'Total cost','MDI','PGSI'},'Location','northeast','NumColumns',3,'box','on');
set(gca,'FontSize',11);
2.最终解决方法
我们可以借鉴图像中的分层原理,用零矩阵代替数据小的数,绘制双y轴的柱形图,将数量级大的和数据级小的分开绘制,绘制程序,结果如图:
程序
clc;%清除命令行窗口
clear all;%清除工作区变量
close all;%关闭图形窗口
%加载数据
data1 =[4201.9842 3702.1587 4089.4364 4141.2310 3977.6403 3679.8192]';
data2 = [ 0.5370 0.5776 0.5698 0.5494 0.5627 0.5826]';
data3 = [2.5475 2.0062 2.2437 2.3446 2.2953 2.1852]';
data4 = zeros(6,1);
%绘制图像
set(0,'DefaultFigureVisible','on');
g=figure;
left_color=[0 0 0];
right_color=[0 0 0];
set(g,'defaultAxesColorOrder',[left_color; right_color]);
yyaxis left
c = categorical({'Reference scenario','Scenario 1','Scenario 2','Scenario 3','Scenario 4','Scenario 5'});
h1=bar(c,[ data1 data4 data4]);%用0数据占据位置 但是绘制时不会出现 进一步设置其颜色为所需的颜色
set(h1(1),'facecolor','r','LineStyle',':');
set(h1(2),'facecolor','b','LineStyle',':');
set(h1(3),'facecolor','k','LineStyle',':');
ylabel('Cost');
ylim([0 5000]);
grid on;
grid minor;
yyaxis right
h2=bar(c,[ data4 data2 data3]);
set(h2(1),'facecolor','r','LineStyle',':');
set(h2(2),'facecolor','b','LineStyle',':');
set(h2(3),'facecolor','k','LineStyle',':');
ylim([0 3]);
legend({'Total cost','MDI','PGSI'},'Location','northeast','NumColumns',3,'box','on');
set(gca,'FontSize',11);
3.参考文章
[1]CSDN博主yyyyydddd1的《Matlab 绘制双y轴柱状图》
文章链接为:
https://blog.csdn.net/yyyyydddd1/article/details/124194446
作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙
猜你喜欢
- 2025-07-06 MATLAB的Simulink常用模块(一)
- 2025-07-06 MATLAB的fzero函数求解单变量非线性方程求解
- 2025-07-06 MATLAB基础学习之数值积分(一次函数定积分)
- 2025-07-06 Matlab绘制图像,imagesc和pcolor的区别【工作记录4】
- 2025-07-06 喆学(20):Matlab学习之三维曲面图
- 2025-07-06 MATLAB实例讲解yyaxis函数绘制双y轴图形
- 最近发表
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- javascript权威指南 (19)
- nfs (25)
- springbatch (28)
- oracle数据库备份 (25)
- iptables (21)
- 自动化单元测试 (18)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- http error 503 (21)
- android退出应用 (21)
- 图片透明度 (20)
- c 数组 (33)
- pascal语言教程 (23)
- java 下载 (20)
- ppt 教程 (35)
- java7 (24)
- 存储区域网络 (19)