阴影柱状图绘制的代码MATHWORKS上也有,不过是生成图片后,识别图像上不同颜色块并直接修改像素生成阴影线,这样的生成方式不可逆且自由度较低,因此本人开发了一个直接画线条填充的硬画版本。

另:由于不太想动脑子,使用polyshape对象进行了交点判定,减少了代码出错的概率,但由于代码开发基于polyshape对象,阴影柱状图绘制函数理论上需要至少R2017b及之后版本才能使用(越新越好)。

由于工具函数过长,将被放在最后展示,以下将先展示函数用法。

示例图


使用教程

1 基本使用

就短短三行代码就能画,真的简单:

y=[2 2 -3 -2 -5; -2 -5 6 2 5; 9 8 9 2 5];SH=shadowHist(y,'ShadowType',{'/','\','.','x','|'});
SH=SH.draw();

2 添加图例

使用legend函数添加图例,使用方式如下:

y=[2 2 3 2 5; 2 5 6 2 5; 9 8 9 2 5];SH=shadowHist(y,'ShadowType',{'/','\','.','_','+'});
SH=SH.draw();
SH=SH.legend({'AAAAAAA','BBBBBBB','CCCCCCC','DDDDDDD','EEEEEEE'},'FontName','Arial','FontSize',11);

图例是自行绘制的,能拖动及自动缩放(老难算了这玩意):

3 阴影格式

阴影有:
\,/,_,|,+,x,.,w,k,g
十种格式,以下全部展示一下:

y=[2 2 3 2 5 4 2 2 2 1;2 2 3 2 5 4 2 4 3 6];SH=shadowHist(y,'ShadowType',{'/','\','x','.','_','|','+','w','k','g'});
SH=SH.draw();
SH=SH.legend({'A','B','C','D','E','F','G','H','I','J'});

4 特殊结构

含负数

y=[2 2 -3 -2 -5; -2 -5 6 2 5; 9 8 9 2 5];SH=shadowHist(y,'ShadowType',{'/','\','.','x','|'});
SH=SH.draw();

堆叠柱状图

y=[2 2 -3 -2 -5; -2 -5 6 2 5; 9 8 9 2 5; -3 -5 6 2 5; 4 8 5 2 5];SH=shadowHist(y,'ShadowType',{'/','\','.','x','|'},'stacked');
SH=SH.draw();

5 额外修饰

阴影、柱状图框、图例框分别具有barShadow,barBox,lgdBox的标签,使用findobj获取对象并循环修饰即可,不过为了绘制更好看,部分阴影使用plot绘制部分则是使用scatter绘制,因此阴影修饰时要用if先检测一下格式,给个示例:

y=[2 2 3 2 5; 2 5 6 2 5; 9 8 9 2 5];SH=shadowHist(y,'ShadowType',{'/','\','.','_','+'});
SH=SH.draw();
SH=SH.legend({'AAAAAAA','BBBBBBB','CCCCCCC','DDDDDDD','EEEEEEE'},'FontName','Cambria','FontSize',11);% 修饰阴影变成红色并加粗
shadowHdl=findobj('Tag','barShadow');
for i=1:length(shadowHdl)if isa(shadowHdl(i),'matlab.graphics.chart.primitive.Line')shadowHdl(i).Color=[.8,.6,.6];shadowHdl(i).LineWidth=1;elseshadowHdl(i).MarkerFaceColor=[.8,.6,.6];shadowHdl(i).SizeData=5;end
end% 修饰框变为蓝色并加粗
boxHdl=findobj('Tag','barBox');
for i=1:length(boxHdl)boxHdl(i).EdgeColor=[.3,.3,.8];boxHdl(i).LineWidth=2;
end% 图例框加粗并变成绿色
lgdBox=findobj('Tag','lgdBox');
lgdBox.LineWidth=1.3;
lgdBox.EdgeColor=[.1,.3,.1];
lgdBox.FaceColor=[173,189,163]./255;

光看上面代码大佬们应该就已经懂了咋用,如果比较小白,可以直接使用MATLAB自带的属性修饰器:

点击:查看->属性修饰器

点击选中对象即可立即修饰颜色、粗细等各种格式:


工具函数完整代码

classdef shadowHist
% @author : slandarer
% gzh  : slandarer随笔% 使用示例:
% =========================================================================
% y=[2 2 3 2 5; 2 5 6 2 5; 9 8 9 2 5];
%
% SH=shadowHist(y,'ShadowType',{'/','\','.','x','|'});
% SH=SH.draw();propertiesax         % 绘图坐标区域YData      % 数值矩阵shadowTypeList={'\','/','_','|','+','x','.','w','k','g'}shadowType % 阴影类型otherProp  % 其他初始属性oriBarHdl  % 原始图形句柄newBarHdlpshapeHdl  % polyshape图形句柄groupNum   % 组数  classNum   % 类数YEndMat    % 末端y值maxY       % 最大Y值   minY=0     % 最小Y值diffY      % Y值之差BarW       % 宽度YSep1      % linspace(obj.minY,obj.maxY+.02.*obj.diffY,obj.lineNum)YSep2XMean      % 每组柱状图每个柱子的中心位置lineNum=90 % 阴影基础线数量XYRateSHLegendoriLegendendmethodsfunction obj=shadowHist(varargin)% 基础属性设置if isa(varargin{1},'matlab.graphics.axis.Axes')obj.ax=varargin{1};varargin(1)=[];elseobj.ax=gca;endhold(obj.ax,'on');obj.YData=varargin{1};varargin(1)=[];if any(strcmpi('shadowType',varargin))tind=find(strcmpi('shadowType',varargin));obj.shadowType=varargin{tind+1};varargin([tind,tind+1])=[];elseobj.shadowType=obj.shadowTypeList;endobj.otherProp=varargin;help shadowHistendfunction obj=draw(obj)% 基础绘图obj.oriBarHdl=bar(obj.ax,obj.YData,obj.otherProp{:},'Tag','barBox');obj.XYRate=diff(obj.ax.YLim)./diff(obj.ax.XLim);% 更多属性获取obj.YEndMat=zeros([length(obj.oriBarHdl),length(obj.oriBarHdl(1).XData)]);for i=1:length(obj.oriBarHdl)obj.YEndMat(i,:)=obj.oriBarHdl(i).YEndPoints;endobj.maxY=max(obj.YEndMat,[],[1,2]);obj.minY=min(0,min(obj.YEndMat,[],[1,2]));obj.diffY=obj.maxY-obj.minY;obj.classNum=length(obj.oriBarHdl);obj.groupNum=length(obj.oriBarHdl(1).XData);% 计算柱状图宽度和位置% obj.XMean=linspace(-obj.classNum+1,obj.classNum-1,obj.classNum)./(3+2*obj.classNum);for i=1:obj.classNumobj.XMean(i)=obj.oriBarHdl(i).XEndPoints(1)-1;endtXMean=[obj.XMean,1];obj.BarW=(tXMean(2)-tXMean(1))./2.*obj.oriBarHdl(1).BarWidth;if strcmp(obj.oriBarHdl(1).BarLayout,'stacked')obj.BarW=1./2.*obj.oriBarHdl(1).BarWidth;endYY1=linspace(obj.minY,obj.maxY+.02.*obj.diffY,obj.lineNum)';YY2=linspace(obj.minY-.02.*obj.diffY,obj.maxY,obj.lineNum)';obj.YSep1=YY1(1)-YY2(2);obj.YSep2=YY1(2)-YY1(1);% 循环绘制阴影for i=1:obj.classNumobj.oriBarHdl(i).FaceColor='none';obj.oriBarHdl(i).LineWidth=.8;if strcmp(obj.oriBarHdl(1).BarLayout,'stacked')obj.oriBarHdl(i).LineWidth=.8;endtType=mod(i-1,length(obj.shadowType))+1;switch obj.shadowType{tType}case 'w',obj.oriBarHdl(i).FaceColor=[1,1,1];case 'k',obj.oriBarHdl(i).FaceColor=[0,0,0];case 'g',obj.oriBarHdl(i).FaceColor=[.5,.5,.5];endfor j=1:obj.groupNumtX=[-1,1,1,-1].*obj.BarW+obj.XMean(i)+j;tY=[obj.oriBarHdl(i).YEndPoints(j)-obj.oriBarHdl(i).YData(j),...obj.oriBarHdl(i).YEndPoints(j)-obj.oriBarHdl(i).YData(j),...obj.oriBarHdl(i).YEndPoints(j),...obj.oriBarHdl(i).YEndPoints(j)];    tPolyPhape=polyshape(tX,tY);switch obj.shadowType{tType}case '\'XX1=-1.2.*ones([obj.lineNum,1]).*obj.BarW+obj.XMean(i)+j;XX2=1.2.*ones([obj.lineNum,1]).*obj.BarW+obj.XMean(i)+j;YY1=linspace(obj.minY,obj.maxY+.02.*obj.diffY,obj.lineNum)';YY2=linspace(obj.minY-.02.*obj.diffY,obj.maxY,obj.lineNum)';tXX=zeros([3,obj.lineNum]);tYY=zeros([3,obj.lineNum]);for k=1:obj.lineNum[in,~]=intersect(tPolyPhape,[XX1(k),YY1(k);XX2(k),YY2(k)]);if ~isempty(in)tXX(:,k)=[in(1,1);in(end,1);nan];tYY(:,k)=[in(1,2);in(end,2);nan];elsetXX(:,k)=[nan;nan;nan];tYY(:,k)=[nan;nan;nan];endendplot(tXX(:),tYY(:),'Color',[0,0,0],'LineWidth',.5,'Tag','barShadow')case '/'XX1=-1.2.*ones([obj.lineNum,1]).*obj.BarW+obj.XMean(i)+j;XX2=1.2.*ones([obj.lineNum,1]).*obj.BarW+obj.XMean(i)+j;YY1=linspace(obj.minY-.02.*obj.diffY,obj.maxY,obj.lineNum)';YY2=linspace(obj.minY,obj.maxY+.02.*obj.diffY,obj.lineNum)';tXX=zeros([3,obj.lineNum]);tYY=zeros([3,obj.lineNum]);for k=1:obj.lineNum[in,~]=intersect(tPolyPhape,[XX1(k),YY1(k);XX2(k),YY2(k)]);if ~isempty(in)tXX(:,k)=[in(1,1);in(end,1);nan];tYY(:,k)=[in(1,2);in(end,2);nan];elsetXX(:,k)=[nan;nan;nan];tYY(:,k)=[nan;nan;nan];endendplot(tXX(:),tYY(:),'Color',[0,0,0],'LineWidth',.5,'Tag','barShadow')case '_'tXX=[tX(1),tX(2),nan];tYY=linspace(obj.minY-.02.*obj.diffY,obj.maxY+.02.*obj.diffY,obj.lineNum)';tYY(tYY>=max(tY))=[];tYY(tYY<=min(tY))=[];tXX=repmat(tXX,[length(tYY),1])';tYY=repmat(tYY,[1,size(tXX,1)])';plot(tXX(:),tYY(:),'Color',[0,0,0],'LineWidth',.5,'Tag','barShadow')case '|'tXX=linspace(tX(1),tX(2),5);if strcmp(obj.oriBarHdl(1).BarLayout,'stacked')tXX=linspace(tX(1),tX(2),9);endtXX=tXX(2:end-1);tYY=[tY(2),tY(3),nan]';tXX=repmat(tXX,[length(tYY),1]);tYY=repmat(tYY,[1,size(tXX,2)]);plot(tXX(:),tYY(:),'Color',[0,0,0],'LineWidth',.5,'Tag','barShadow')case '+'tXX=[tX(1),tX(2),nan];tYY=linspace(obj.minY-.02.*obj.diffY,obj.maxY+.02.*obj.diffY,obj.lineNum)';tYY(tYY>=max(tY))=[];tYY(tYY<=min(tY))=[];tXX1=repmat(tXX,[length(tYY),1])';tYY1=repmat(tYY,[1,size(tXX1,1)])';   tXX=linspace(tX(1),tX(2),5);if strcmp(obj.oriBarHdl(1).BarLayout,'stacked')tXX=linspace(tX(1),tX(2),9);endtXX=tXX(2:end-1);tYY=[tY(2),tY(3),nan]';tXX2=repmat(tXX,[length(tYY),1]);tYY2=repmat(tYY,[1,size(tXX2,2)]);plot([tXX1(:);nan;tXX2(:)],[tYY1(:);nan;tYY2(:)],'Color',[0,0,0],'LineWidth',.5,'Tag','barShadow')case 'x'XX1=-1.2.*ones([obj.lineNum,1]).*obj.BarW+obj.XMean(i)+j;XX2=1.2.*ones([obj.lineNum,1]).*obj.BarW+obj.XMean(i)+j;YY1=linspace(obj.minY-obj.BarW.*2.4.*obj.XYRate,obj.maxY,obj.lineNum)';YY2=YY1+obj.BarW.*2.4.*obj.XYRate;tXX=zeros([3,obj.lineNum]);tYY=zeros([3,obj.lineNum]);for k=1:obj.lineNum[in,~]=intersect(tPolyPhape,[XX1(k),YY1(k);XX2(k),YY2(k)]);if ~isempty(in)tXX(:,k)=[in(1,1);in(end,1);nan];tYY(:,k)=[in(1,2);in(end,2);nan];elsetXX(:,k)=[nan;nan;nan];tYY(:,k)=[nan;nan;nan];endend;tXX1=tXX(:);tYY1=tYY(:);YY1=linspace(obj.minY,obj.maxY+obj.BarW.*2.4.*obj.XYRate,obj.lineNum)';YY2=YY1-obj.BarW.*2.4.*obj.XYRate;tXX=zeros([3,obj.lineNum]);tYY=zeros([3,obj.lineNum]);for k=1:obj.lineNum[in,~]=intersect(tPolyPhape,[XX1(k),YY1(k);XX2(k),YY2(k)]);if ~isempty(in)tXX(:,k)=[in(1,1);in(end,1);nan];tYY(:,k)=[in(1,2);in(end,2);nan];elsetXX(:,k)=[nan;nan;nan];tYY(:,k)=[nan;nan;nan];endend;tXX2=tXX(:);tYY2=tYY(:);    plot([tXX1(:);nan;tXX2(:)],[tYY1(:);nan;tYY2(:)],'Color',[0,0,0],'LineWidth',.5,'Tag','barShadow')case '.'tXX=linspace(tX(1)+obj.BarW./4,tX(2)-obj.BarW./4,3);if strcmp(obj.oriBarHdl(1).BarLayout,'stacked')tXX=linspace(tX(1)+obj.BarW./8,tX(2)-obj.BarW./8,9);endtYY=linspace(obj.minY-.02.*obj.diffY,obj.maxY+.02.*obj.diffY,obj.lineNum)';tYY(tYY>=max(tY))=[];tYY(tYY<=min(tY))=[];tXX=repmat(tXX,[length(tYY),1]);tYY=repmat(tYY,[1,size(tXX,2)]);scatter(tXX(:),tYY(:),2,'filled','o','MarkerEdgeColor','none','MarkerFaceColor',[0,0,0],'Tag','barShadow')endendend            endfunction obj=legend(obj,cellStr,varargin)obj.newBarHdl=bar(obj.ax,obj.YData,obj.otherProp{:},'FaceColor','none','EdgeColor','none');obj.oriLegend=legend(obj.newBarHdl,cellStr,varargin{:});obj.oriLegend.AutoUpdate='off';obj.oriLegend.Box='off';obj.ax.XLim=obj.ax.XLim;obj.ax.YLim=obj.ax.YLim;tXYMin=(obj.oriLegend.Position(1:2)-obj.ax.Position(1:2))./obj.ax.Position(3:4).*[diff(obj.ax.XLim),diff(obj.ax.YLim)]+[obj.ax.XLim(1),obj.ax.YLim(1)];tXYMax=(obj.oriLegend.Position(1:2)+obj.oriLegend.Position(3:4)-obj.ax.Position(1:2))./obj.ax.Position(3:4).*[diff(obj.ax.XLim),diff(obj.ax.YLim)]+[obj.ax.XLim(1),obj.ax.YLim(1)];boxHdl=fill([tXYMin(1),tXYMax(1),tXYMax(1),tXYMin(1)],[tXYMin(2),tXYMin(2),tXYMax(2),tXYMax(2)],[1,1,1],'Tag','lgdBox');for n=1:length((obj.oriBarHdl))ttType=mod(n-1,length(obj.shadowType))+1;squareHdl(n)=fill([0,0,0],[0,0,0],[1,1,1],'EdgeColor',[0,0,0],'LineWidth',.7,'Tag','barBox');if strcmp(obj.shadowType{ttType},'.')lgdLineHdl(n)=scatter(0,0,2,'filled','o','MarkerEdgeColor','none','MarkerFaceColor',[0,0,0],'Tag','barShadow');elselgdLineHdl(n)=plot(0,0,'Color',[0,0,0],'LineWidth',.5,'Tag','barBox','Tag','barShadow');endendmoveLgd()set(obj.ax.Parent,'WindowButtonMotionFcn',@moveLgd);function moveLgd(~,~)XYMin=(obj.oriLegend.Position(1:2)-obj.ax.Position(1:2))./obj.ax.Position(3:4).*[diff(obj.ax.XLim),diff(obj.ax.YLim)]+[obj.ax.XLim(1),obj.ax.YLim(1)];XYMax=(obj.oriLegend.Position(1:2)+obj.oriLegend.Position(3:4)-obj.ax.Position(1:2))./obj.ax.Position(3:4).*[diff(obj.ax.XLim),diff(obj.ax.YLim)]+[obj.ax.XLim(1),obj.ax.YLim(1)];boxHdl.XData=[XYMin(1),XYMax(1),XYMax(1),XYMin(1)];boxHdl.YData=[XYMin(2),XYMin(2),XYMax(2),XYMax(2)];Y=XYMin(2)+(XYMax(2)-XYMin(2)).*linspace(1/length(obj.newBarHdl)/2+1/50,1-1/length(obj.newBarHdl)/2-1/50,length(obj.newBarHdl));obj.XYRate=diff(obj.ax.YLim)./diff(obj.ax.XLim);PBA=obj.ax.PlotBoxAspectRatio(2)./obj.ax.PlotBoxAspectRatio(1)./0.7896;Y=fliplr(Y);for i=1:length((obj.oriBarHdl))    tX=XYMin(1)+(XYMax(2)-XYMin(2))./2./length(obj.newBarHdl).*[1/10,1.18,1.18,1/10].*(PBA./obj.XYRate.*3);tY=Y(i)+0.75.*[-1,-1,1,1].*(XYMax(2)-XYMin(2))./2./length(obj.newBarHdl);squareHdl(i).XData=tX;squareHdl(i).YData=tY;tPolyPhape=polyshape(tX,tY);tType=mod(i-1,length(obj.shadowType))+1;switch obj.shadowType{tType}case '\'XX1=ones([51,1]).*(tX(1)-.2.*(tX(2)-tX(1)));XX2=ones([51,1]).*(tX(2)+.2.*(tX(2)-tX(1)));YY1=((-25:1:25).*obj.YSep2+obj.YSep1+Y(i))';YY2=((-25:1:25).*obj.YSep2-obj.YSep1+Y(i))';tXX=zeros([3,obj.lineNum]);tYY=zeros([3,obj.lineNum]);for k=1:51[in,~]=intersect(tPolyPhape,[XX1(k),YY1(k);XX2(k),YY2(k)]);if ~isempty(in)tXX(:,k)=[in(1,1);in(end,1);nan];tYY(:,k)=[in(1,2);in(end,2);nan];elsetXX(:,k)=[nan;nan;nan];tYY(:,k)=[nan;nan;nan];endendlgdLineHdl(i).XData=tXX(:)';lgdLineHdl(i).YData=tYY(:)';case '/'XX1=ones([51,1]).*(tX(1)-.2.*(tX(2)-tX(1)));XX2=ones([51,1]).*(tX(2)+.2.*(tX(2)-tX(1)));YY1=((-25:1:25).*obj.YSep2-obj.YSep1+Y(i))';YY2=((-25:1:25).*obj.YSep2+obj.YSep1+Y(i))';tXX=zeros([3,obj.lineNum]);tYY=zeros([3,obj.lineNum]);for k=1:51[in,~]=intersect(tPolyPhape,[XX1(k),YY1(k);XX2(k),YY2(k)]);if ~isempty(in)tXX(:,k)=[in(1,1);in(end,1);nan];tYY(:,k)=[in(1,2);in(end,2);nan];elsetXX(:,k)=[nan;nan;nan];tYY(:,k)=[nan;nan;nan];endendlgdLineHdl(i).XData=tXX(:);lgdLineHdl(i).YData=tYY(:);case '_'tXX=[tX(1),tX(2),nan];tYY=linspace(tY(2),tY(3),5)';tYY=tYY(2:4);tXX=repmat(tXX,[length(tYY),1])';tYY=repmat(tYY,[1,size(tXX,1)])';lgdLineHdl(i).XData=tXX(:);lgdLineHdl(i).YData=tYY(:);case '|'tXX=linspace(tX(1),tX(2),11);tXX=tXX(2:end-1);tYY=[tY(2),tY(3),nan]';tXX=repmat(tXX,[length(tYY),1]);tYY=repmat(tYY,[1,size(tXX,2)]);lgdLineHdl(i).XData=tXX(:);lgdLineHdl(i).YData=tYY(:);case '+'tXX=[tX(1),tX(2),nan];tYY=linspace(tY(2),tY(3),5)';tYY=tYY(2:4);tXX1=repmat(tXX,[length(tYY),1])';tYY1=repmat(tYY,[1,size(tXX1,1)])';tXX=linspace(tX(1),tX(2),11);tXX=tXX(2:end-1);tYY=[tY(2),tY(3),nan]';tXX2=repmat(tXX,[length(tYY),1]);tYY2=repmat(tYY,[1,size(tXX2,2)]);lgdLineHdl(i).XData=[tXX1(:);nan;tXX2(:)];lgdLineHdl(i).YData=[tYY1(:);nan;tYY2(:)];case 'x'XX1=ones([51,1]).*(tX(1)-.2.*(tX(2)-tX(1)));XX2=ones([51,1]).*(tX(2)+.2.*(tX(2)-tX(1)));YY1=((-25:1:25).*obj.YSep2-obj.YSep1+Y(i))';YY2=YY1+(tX(2)-tX(1)+.4.*(tX(2)-tX(1))).*obj.XYRate;tXX=zeros([3,51]);tYY=zeros([3,51]);for k=1:51[in,~]=intersect(tPolyPhape,[XX1(k),YY1(k);XX2(k),YY2(k)]);if ~isempty(in)tXX(:,k)=[in(1,1);in(end,1);nan];tYY(:,k)=[in(1,2);in(end,2);nan];elsetXX(:,k)=[nan;nan;nan];tYY(:,k)=[nan;nan;nan];endend;tXX1=tXX(:);tYY1=tYY(:);YY2=((-25:1:25).*obj.YSep2-obj.YSep1+Y(i))';YY1=YY2+(tX(2)-tX(1)+.4.*(tX(2)-tX(1))).*obj.XYRate;  tXX=zeros([3,51]);tYY=zeros([3,51]);for k=1:51[in,~]=intersect(tPolyPhape,[XX1(k),YY1(k);XX2(k),YY2(k)]);if ~isempty(in)tXX(:,k)=[in(1,1);in(end,1);nan];tYY(:,k)=[in(1,2);in(end,2);nan];elsetXX(:,k)=[nan;nan;nan];tYY(:,k)=[nan;nan;nan];endend;tXX2=tXX(:);tYY2=tYY(:);lgdLineHdl(i).XData=[tXX1(:);nan;tXX2(:)];lgdLineHdl(i).YData=[tYY1(:);nan;tYY2(:)];case '.'tXX=linspace(tX(1),tX(2),9);tYY=linspace(tY(2)+(tY(3)-tY(2))/6,tY(3)-(tY(3)-tY(2))/6,3)';tXX(1)=[];tXX(end)=[];tXX=repmat(tXX,[length(tYY),1]);tYY=repmat(tYY,[1,size(tXX,2)]);lgdLineHdl(i).XData=tXX(:);lgdLineHdl(i).YData=tYY(:);case 'w'squareHdl(i).FaceColor=[1,1,1];case 'k'squareHdl(i).FaceColor=[0,0,0];case 'g'squareHdl(i).FaceColor=[.5,.5,.5];endendendendend
% @author : slandarer
% gzh  : slandarer随笔
end

封面图绘制代码

y=[2 2 3 2 5; 2 5 6 2 5; 9 8 9 2 5];SH=shadowHist(y,'ShadowType',{'/','\','.','_','+'});
SH=SH.draw();
SH=SH.legend({'AAAAAAA','BBBBBBB','CCCCCCC','DDDDDDD','EEEEEEE'},'FontName','Cambria','FontSize',11);
% 坐标区域修饰
ax=gca;
ax.FontName='Cambria';
ax.LineWidth=1.1;
ax.XColor=[1,1,1].*.3;
ax.YColor=[1,1,1].*.3;
ax.XMinorTick='on';
ax.YMinorTick='on';
ax.XGrid='on';
ax.YGrid='on';
ax.Box='on';
ax.GridLineStyle='-.';
ax.GridAlpha=.1;
% 图例框修饰
lgdBox=findobj('Tag','lgdBox');
lgdBox.LineWidth=1.3;


MATLAB阴影柱状图硬画能画成这样属实不易,如果有用请留个叭~

未经允许本代码请勿作商业用途,引用的话可以引用我file exchange上的链接,可使用如下格式:

Zhaoxu Liu (2022). Histogram with shadow 阴影柱状图 (https://www.mathworks.com/matlabcentral/fileexchange/117005-histogram-with-shadow), MATLAB Central File Exchange. 检索来源 2022/9/1.

若转载请保留以上file exchange链接及本文链接!!!

全部m文件获取
【链接】:https://pan.baidu.com/s/1ZZwSCJsTmXFrGqeM1CCY8w?pwd=slan
【提取码】:slan

1.5.1版本:新增水平柱状图绘制功能
【链接】:https://pan.baidu.com/s/1gyfSnDYOtB7p2jPHIqQmOw?pwd=slan
【提取码】:slan

MATLAB | 全网唯一 ,MATLAB绘制阴影柱状图(填充斜线)相关推荐

  1. MATLAB | 全网唯一 MATLAB双向弦图(有向弦图)绘制

    先赞后看,养成习惯~~ 先赞后看,养成习惯~~ 先赞后看,养成习惯~~ 绘制效果 下面这款弦图我已经出了很久了,也陆陆续续增添了新的功能和修了一些bug: 甚至还用它做出了一些复刻,分成两组的弦图有了 ...

  2. matlab柱状图加阴影,matlab 绘制 阴影 柱状图 条形图

    matlab 绘制 阴影 柱状图 条形图 matlab 绘制 阴影 柱状图 条形图 matlab 绘制 阴影 黑白 柱状图 条形图 冰三点水 在科技文献写作等过程中,我们往往需要粘贴柱状图或者条形图, ...

  3. MATLAB | 全网唯一,使用MATLAB绘制矩形树状图

    绘制效果 全网唯一这四个字我都快说腻了,请叫我绘图小天才,又双叒叕写了一个工具函数发到了MATHWORKS,矩形树状图主要用于直观展示各个元素的分类和占比. 编写不易点个赞叭~~ 基本使用 需要准备一 ...

  4. MATLAB | 全网唯一,使用MATLAB绘制精致的环形树状图

    绘制效果 请叫我平平无奇的绘图天才,这期一次性带来俩工具函数,分别是两层和三层的环形树状图,可以用来展示数据分类和层级: 理顺层级关系属实理得头秃,代码编写不易点个赞叭!! 由于工具函数过长,将被放在 ...

  5. MATLAB | 全网唯一,使用MATLAB绘制好看的韦恩图(venn)

    韦恩图绘制的代码MATHWORKS上也有,不过最多只支持四组绘制,于是我参考R语言ggVennDiagram包制作了一款支持7组样本的韦恩图绘制MATLAB函数. 注意:仅代码无法运行,需要导入.ma ...

  6. MATLAB | 全网唯一! 又双叒叕一种弦图绘制

    前几天有粉丝问我这种图能不能画: 大体看了一下就是有联系的两个元素之间连线,同时将不同类用不同颜色划分,于是又双叒叕了一个工具函数: 绘制效果 教程部分 基础使用 输入数据要求一个nxn大小的0-1矩 ...

  7. MATLAB | 全网唯一,三元相映射图绘制(三元相分级统计地图)

    示例 对上期的补充 本期文章名叫三元相映射图绘制,但不单单讲这一点,同时会对上一篇多元映射地图做出补充https://slandarer.blog.csdn.net/article/details/1 ...

  8. MATLAB | 面积图、饼状图、水平柱状图的斜线填充(阴影填充)

    没想到叭,阴影柱状图仅仅一天就迎来了(1.5.1)版本,已经支持水平柱状图绘制!!同时本人又连夜赶制了另外两款相关的阴影图绘制函数: 来来来,后文马上介绍一下这三款函数. 另:代码开发基于polysh ...

  9. matlab rgb三维直方图,MATLAB小技巧之十:利用MATLAB绘制三维彩色柱状图[转载]

    MATLAB自带有绘制三维柱状图的函数bar3,有版友反映不好控制柱子的颜色,特别是bar3不能绘制渐变色的柱子,并且bar3不能根据用户指定的散点数据绘制柱状图.为此,我编写了一个函数(scatte ...

  10. 【MATLAB基础绘图第7棒】绘制各式柱状图

    MATLAB绘制各式柱状图 1 分组绘制柱状图 1.1 案例1:常规分组柱状图 2 绘制渐变柱状图 2.1 案例 3 绘制多组柱状图并修改文字颜色一致 3.1 案例 4 绘制双轴-倒立柱状图 5 绘制 ...

最新文章

  1. sap系统搭建教程_Nios ii最小系统搭建教程
  2. ASP.Net 获取当前时间
  3. C语言 memset()函数(内存初始化函数)
  4. 腐蚀国内稳定服务器_工控机箱和服务器机箱区别在哪里
  5. S5PV210裸机之GPIO
  6. Linux学习之CentOS(三十二)--Linux系统服务基础
  7. 三菱plc pwm指令_2020学员高级电工必须掌握的20个各种PLC设备编程
  8. Debug查看汉字机内码
  9. HBase 数据库介绍
  10. 我教你写Makefile,你给我介绍Girlfriends.
  11. 2. 工业大数据的特点
  12. 看清接收网络数据包的全过程
  13. 如何给计算机硬盘解除密码忘了,电脑硬盘加密忘记密码是怎么处理?
  14. RISC-V MCU低功耗场景的应用分析
  15. 数据迁移怎么测,都有哪些步骤?
  16. 10G DWDM SFP+ Tunable可调光模块与常规DWDM光模块的区别
  17. 「塔望咨询」×「皇品食品」2022上半年营销集锦
  18. 分糖果 小明从糖果盒中
  19. office2018自动图文集_学会使用Word自动图文集,让你事半功倍
  20. 2020-11-22 Vue-10组件化开发(1)

热门文章

  1. 四旋翼无人机学习第7节--Si24R1以及RGBLED电路分析
  2. 高中数学基础-1.2.2函数的表示法(上):解析法、列表法、图形法
  3. Atom 常用快捷键
  4. 数据不正态分布如何办?
  5. Android中获取并设置屏幕亮度
  6. 晶振负载电容是什么意思?关于晶振负载电容
  7. 史上最真实的网络飙车游戏
  8. 【UCSC Genome Browser】- 小技巧
  9. 成功解决wps文档中,有些空白页费劲死活删除不掉的问题
  10. Word2Vec模型训练简洁步骤