MATLAB 绘制双y轴的柱状图实例加程序
前面介绍过MATLAB如何绘制双y轴图形,为了节省论文里面的图形的数量,可以将类型相同的图绘制在一起,或者将要进行比较的结果数据进行处理。但是对于柱形图而言,当绘制图像的数据差距过大,数据小的图形的图像很短。今天主要介绍MATLAB 绘制双y轴的柱状图实例加程序。<hr/>例如要处理如下的数据,绘制柱形图进行对比分析。
data1 =&#39;;
data2 = [ 0.5370 0.5776 0.5698 0.5494 0.5627 0.5826]&#39;;
data3 = &#39;;由数据分析得,三组数据的数量级差距较大,单个绘制出来的效果如图,其余两个柱形图差距较大,基本在图形上没有显示。
程序
clc;%清除命令行窗口
clear all;%清除工作区变量
close all;%关闭图形窗口
%加载数据
data1 =&#39;;
data2 = [ 0.5370 0.5776 0.5698 0.5494 0.5627 0.5826]&#39;;
data3 = &#39;;
data4 = zeros(6,1);
%绘制图像
set(0,&#39;DefaultFigureVisible&#39;,&#39;on&#39;);
c = categorical({&#39;Reference scenario&#39;,&#39;Scenario 1&#39;,&#39;Scenario 2&#39;,&#39;Scenario 3&#39;,&#39;Scenario 4&#39;,&#39;Scenario 5&#39;});
h1=bar(c,[ data1 data2 data2]);
set(h1(1),&#39;facecolor&#39;,&#39;r&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
set(h1(2),&#39;facecolor&#39;,&#39;b&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
set(h1(3),&#39;facecolor&#39;,&#39;k&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
grid on;
grid minor;
legend({&#39;Total cost&#39;,&#39;MDI&#39;,&#39;PGSI&#39;},&#39;Location&#39;,&#39;northeast&#39;,&#39;NumColumns&#39;,3,&#39;box&#39;,&#39;on&#39;);
set(gca,&#39;FontSize&#39;,11);<hr/>1.初步解决方法
我们可以尝试绘制双y轴图形,分开绘制图像的柱形图,可以参考往期绘制双y轴图形的方式尝试写程序,运行结果如图:
程序
clc;%清除命令行窗口
clear all;%清除工作区变量
close all;%关闭图形窗口
%加载数据
data1 =&#39;;
data2 = [ 0.5370 0.5776 0.5698 0.5494 0.5627 0.5826]&#39;;
data3 = &#39;;
%绘制图像
set(0,&#39;DefaultFigureVisible&#39;,&#39;on&#39;);
g=figure;
left_color=;
right_color=;
set(g,&#39;defaultAxesColorOrder&#39;,);
yyaxis left
c = categorical({&#39;Reference scenario&#39;,&#39;Scenario 1&#39;,&#39;Scenario 2&#39;,&#39;Scenario 3&#39;,&#39;Scenario 4&#39;,&#39;Scenario 5&#39;});
h1=bar(c,[ data1 ]);
set(h1(1),&#39;facecolor&#39;,&#39;r&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
ylabel(&#39;Cost&#39;);
ylim();
grid on;
grid minor;
yyaxis right
h2=bar(c,[ data2 data3]);
set(h2(1),&#39;facecolor&#39;,&#39;b&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
set(h2(2),&#39;facecolor&#39;,&#39;k&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
ylim();
legend({&#39;Total cost&#39;,&#39;MDI&#39;,&#39;PGSI&#39;},&#39;Location&#39;,&#39;northeast&#39;,&#39;NumColumns&#39;,3,&#39;box&#39;,&#39;on&#39;);
set(gca,&#39;FontSize&#39;,11);<hr/>2.最终解决方法
我们可以借鉴图像中的分层原理,用零矩阵代替数据小的数,绘制双y轴的柱形图,将数量级大的和数据级小的分开绘制,绘制程序,结果如图:
程序
clc;%清除命令行窗口
clear all;%清除工作区变量
close all;%关闭图形窗口
%加载数据
data1 =&#39;;
data2 = [ 0.5370 0.5776 0.5698 0.5494 0.5627 0.5826]&#39;;
data3 = &#39;;
data4 = zeros(6,1);
%绘制图像
set(0,&#39;DefaultFigureVisible&#39;,&#39;on&#39;);
g=figure;
left_color=;
right_color=;
set(g,&#39;defaultAxesColorOrder&#39;,);
yyaxis left
c = categorical({&#39;Reference scenario&#39;,&#39;Scenario 1&#39;,&#39;Scenario 2&#39;,&#39;Scenario 3&#39;,&#39;Scenario 4&#39;,&#39;Scenario 5&#39;});
h1=bar(c,[ data1 data4 data4]);%用0数据占据位置 但是绘制时不会出现 进一步设置其颜色为所需的颜色
set(h1(1),&#39;facecolor&#39;,&#39;r&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
set(h1(2),&#39;facecolor&#39;,&#39;b&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
set(h1(3),&#39;facecolor&#39;,&#39;k&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
ylabel(&#39;Cost&#39;);
ylim();
grid on;
grid minor;
yyaxis right
h2=bar(c,[ data4 data2 data3]);
set(h2(1),&#39;facecolor&#39;,&#39;r&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
set(h2(2),&#39;facecolor&#39;,&#39;b&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
set(h2(3),&#39;facecolor&#39;,&#39;k&#39;,&#39;LineStyle&#39;,&#39;:&#39;);
ylim();
legend({&#39;Total cost&#39;,&#39;MDI&#39;,&#39;PGSI&#39;},&#39;Location&#39;,&#39;northeast&#39;,&#39;NumColumns&#39;,3,&#39;box&#39;,&#39;on&#39;);
set(gca,&#39;FontSize&#39;,11);<hr/>3.参考文章
CSDN博主yyyyydddd1的《Matlab 绘制双y轴柱状图》
文章链接为:
https://blog.csdn.net/yyyyydddd1/article/details/124194446
<hr/>作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙
页:
[1]