前面两节介绍了用基本图形元素搭建新图表和在MATLAB图表基础上重建图元创建新图表,除此之外,还可以通过组合已有类型图表来创建新图表。
创建带误差条的柱状图
带误差条的柱状图如图2-24所示,该图在二维柱状图的基础上叠加了误差条图,从而可以提供更多的信息。所以该图的绘制很简单,组合二维柱状图和误差条图就可以了。
\[\]
图2-24 带误差条的柱状图
下面的代码实现了带误差条的柱状图的绘制。
code.matlab
x=1:5;
data=[10 15 13 17 16]; %绘柱状图的数据
eh=[0.6 1.2 0.8 1.5 1.0]; %误差条上触须数据
el=[1.0 0.9 1.2 1.1 0.8]; %误差条下触须数据
b=bar(x,data); %绘制柱状图
hold on %叠加绘图
h=errorbar(x,data,eh,el); %误差条图
h.Color='k'; %误差条属性设置
h.LineStyle='none';
h.LineWidth=1;
hold off
xlabel('X')
ylabel('Y')
box on
自己创建帕累托图
MATLAB的统计工具箱提供了绘制帕累托图的函数,这里我们自己创建一下。图2-25中即为帕累托图,可见,帕累托图是二维柱状图和线形图的组合。而且,该图实际上是一个双轴图,有两个y轴,共用一个x轴。柱状图表示数据的大小,注意从大到小进行了排序。线形图表示各条形数据当前累加和占总和的百分比。帕累托图能清晰地表现哪些组分是主要组分以及它们的占比情况。
\[\]
图2-25 创建帕累托图
下面的代码实现了帕累托图的自定义创建。
code.matlab
x=1:5; %绘图数据
data0=[60 15 43 17 16];
y1=sort(data0,'descendx27;); %将数据从大到小排序
yp=y1./sum(y1);
y2(1)=yp(1);
for i=2:length(data0)
y2(i)=y2(i-1)+yp(i); %排序后的数据累加求和
end
fig=figure;
ax1=axes(fig);
b=bar(x,y1); %绘二维柱状图
box(ax1,"off")
ax2=axes('Position',get(ax1,'Position'),... %创建第2个坐标系
'XAxisLocation','top',...
'YAxisLocation','right',...
'Color','none',...
'XColor','k','YColor','k');
h=line(x,y2,'Color','r', 'LineWidth',1.5,'Parent',ax2); %用累加和数组绘线形图
ylim(ax1,[0 sum(data0)*1.01]) %两个坐标系的取值范围
ylim(ax2,[0 1.01])
xlim(ax1,[0.5 5.5])
xlim(ax2,[0.5 5.5])
ax2.XAxis.TickLabels='';
ax2.XAxis.TickLength=[0 0];
xlabel(ax1,'X')
ylabel(ax1,'Y')
grid(ax1,"on")