MATLAB绘制双y轴的柱状图实例加程序
前面介绍过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
作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙