亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用Matlab實現(xiàn)陰影柱狀圖的繪制

 更新時間:2022年09月01日 14:51:46   作者:slandarer  
陰影柱狀圖繪制的代碼MATHWORKS上也有,不過是生成圖片后,識別圖像上不同顏色塊并直接修改像素生成陰影線。這樣的生成方式不可逆且自由度較低,所以本文為大家?guī)淼氖且粋€直接畫線條填充的硬畫版本,希望有所幫助

陰影柱狀圖繪制的代碼MATHWORKS上也有,不過是生成圖片后,識別圖像上不同顏色塊并直接修改像素生成陰影線,這樣的生成方式不可逆且自由度較低,因此本人開發(fā)了一個直接畫線條填充的硬畫版本。

另:由于不太想動腦子,使用polyshape對象進行了交點判定,減少了代碼出錯的概率,但由于代碼開發(fā)基于polyshape對象,陰影柱狀圖繪制函數(shù)理論上需要至少R2017b及之后版本才能使用(越新越好)。(再安利一下polyshape對象,屬實太好用了)

由于工具函數(shù)過長,將被放在最后展示,以下將先展示函數(shù)用法。

示例圖

使用教程

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函數(shù)添加圖例,使用方式如下:

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.特殊結(jié)構(gòu)

含負數(shù)

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獲取對象并循環(huán)修飾即可,不過為了繪制更好看,部分陰影使用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;
????else
????????shadowHdl(i).MarkerFaceColor=[.8,.6,.6];
????????shadowHdl(i).SizeData=5;
????end
end

%?修飾框變?yōu)樗{色并加粗
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;

光看上面代碼大佬們應(yīng)該就已經(jīng)懂了咋用,如果比較小白,可以直接使用MATLAB自帶的屬性修飾器:

點擊:查看->屬性修飾器

點擊選中對象即可立即修飾顏色、粗細等各種格式:

工具函數(shù)完整代碼

classdef shadowHist
% @author : slandarer
% 公眾號  : slandarer隨筆
% 知乎    : hikari

% 使用示例:
% =========================================================================
% y=[2 2 3 2 5; 2 5 6 2 5; 9 8 9 2 5];
% 
% SH=shadowHist(y,'ShadowType',{'/','\','.','x','|'});
% SH=SH.draw();

    properties
        ax         % 繪圖坐標區(qū)域
        YData      % 數(shù)值矩陣
        shadowTypeList={'\','/','_','|','+','x','.','w','k','g'}
        shadowType % 陰影類型
        otherProp  % 其他初始屬性

        oriBarHdl  % 原始圖形句柄
        newBarHdl
        pshapeHdl  % polyshape圖形句柄
        groupNum   % 組數(shù)  
        classNum   % 類數(shù)
        YEndMat    % 末端y值
        maxY       % 最大Y值   
        minY=0     % 最小Y值
        diffY      % Y值之差
        BarW       % 寬度
        YSep1      % linspace(obj.minY,obj.maxY+.02.*obj.diffY,obj.lineNum)
        YSep2
        XMean      % 每組柱狀圖每個柱子的中心位置
        lineNum=90 % 陰影基礎(chǔ)線數(shù)量

        XYRate
        SHLegend
        oriLegend
    end

    methods
        function obj=shadowHist(varargin)
            % 基礎(chǔ)屬性設(shè)置
            if isa(varargin{1},'matlab.graphics.axis.Axes')
                obj.ax=varargin{1};varargin(1)=[];
            else
                obj.ax=gca;
            end
            hold(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])=[];
            else
                obj.shadowType=obj.shadowTypeList;
            end
            obj.otherProp=varargin;
            help shadowHist
        end

        function obj=draw(obj)
            % 基礎(chǔ)繪圖
            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;
            end
            obj.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.classNum
                obj.XMean(i)=obj.oriBarHdl(i).XEndPoints(1)-1;
            end
            tXMean=[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;
            end
            YY1=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);

            % 循環(huán)繪制陰影
            for i=1:obj.classNum
                obj.oriBarHdl(i).FaceColor='none';
                obj.oriBarHdl(i).LineWidth=.8;
                if strcmp(obj.oriBarHdl(1).BarLayout,'stacked')
                    obj.oriBarHdl(i).LineWidth=.8;
                end
                tType=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];
                end
                for j=1:obj.groupNum
                    tX=[-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];
                                else
                                    tXX(:,k)=[nan;nan;nan];
                                    tYY(:,k)=[nan;nan;nan];
                                end
                            end
                            plot(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];
                                else
                                    tXX(:,k)=[nan;nan;nan];
                                    tYY(:,k)=[nan;nan;nan];
                                end
                            end
                            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))=[];
                            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);
                            end
                            tXX=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);
                            end
                            tXX=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];
                                else
                                    tXX(:,k)=[nan;nan;nan];
                                    tYY(:,k)=[nan;nan;nan];
                                end
                            end;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];
                                else
                                    tXX(:,k)=[nan;nan;nan];
                                    tYY(:,k)=[nan;nan;nan];
                                end
                            end;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);
                            end
                            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,2)]);
                            scatter(tXX(:),tYY(:),2,'filled','o','MarkerEdgeColor','none','MarkerFaceColor',[0,0,0],'Tag','barShadow')
                    end
                end
            end            
        end

        function 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');
                else
                    lgdLineHdl(n)=plot(0,0,'Color',[0,0,0],'LineWidth',.5,'Tag','barBox','Tag','barShadow');
                end
            end
            moveLgd()
            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];
                            else
                                tXX(:,k)=[nan;nan;nan];
                                tYY(:,k)=[nan;nan;nan];
                            end
                        end
                        lgdLineHdl(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];
                            else
                                tXX(:,k)=[nan;nan;nan];
                                tYY(:,k)=[nan;nan;nan];
                            end
                        end
                        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);
                        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];
                            else
                                tXX(:,k)=[nan;nan;nan];
                                tYY(:,k)=[nan;nan;nan];
                            end
                        end;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];
                            else
                                tXX(:,k)=[nan;nan;nan];
                                tYY(:,k)=[nan;nan;nan];
                            end
                        end;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];
                end
            end
            end
        end
    end
% @author : slandarer
% 公眾號  : slandarer隨筆
% 知乎    : hikari
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);
%?坐標區(qū)域修飾
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實現(xiàn)陰影柱狀圖的繪制的詳細內(nèi)容,更多關(guān)于Matlab陰影柱狀圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c++創(chuàng)建二維動態(tài)數(shù)組與內(nèi)存釋放問題

    c++創(chuàng)建二維動態(tài)數(shù)組與內(nèi)存釋放問題

    這篇文章主要介紹了c++創(chuàng)建二維動態(tài)數(shù)組與內(nèi)存釋放問題,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • C語言 自定義類型全面系統(tǒng)理解

    C語言 自定義類型全面系統(tǒng)理解

    在C語言中自定義類型主要有結(jié)構(gòu)體類型、位段、枚舉類型、聯(lián)合體類型,自定義類型是面試常會碰到的內(nèi)容,本篇文章帶你徹底解決自定義類型
    2022-02-02
  • 詳細分析C++ 數(shù)據(jù)封裝和數(shù)據(jù)抽象

    詳細分析C++ 數(shù)據(jù)封裝和數(shù)據(jù)抽象

    這篇文章主要介紹了C++ 數(shù)據(jù)封裝和數(shù)據(jù)抽象的的相關(guān)資料,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • C++中delete和delete[]的區(qū)別詳細介紹

    C++中delete和delete[]的區(qū)別詳細介紹

    一直對C++中的delete和delete[]的區(qū)別不甚了解,今天遇到了,上網(wǎng)查了一下,得出了結(jié)論,拿出來和大家分享一下
    2012-11-11
  • 淺談const變量賦值報錯分析

    淺談const變量賦值報錯分析

    在類中 只有靜態(tài)變量能賦值 如果你不賦值 編譯器會認為你這個變量根本沒用 不能被修改 又沒有初始值 兩個辦法 在構(gòu)造函數(shù)的初始化列表賦值 或者在const前面加一個static
    2015-07-07
  • C++編寫高性能服務(wù)器實例教程

    C++編寫高性能服務(wù)器實例教程

    這篇文章主要介紹了如何用C++編寫高性能服務(wù)器,文中通過示例代碼介紹的非常詳細,對大家學習C++有一定的參考價值,需要的朋友們可以了解下
    2020-06-06
  • C++:構(gòu)造函數(shù),析構(gòu)函數(shù)詳解

    C++:構(gòu)造函數(shù),析構(gòu)函數(shù)詳解

    今天小編就為大家分享一篇關(guān)于C++構(gòu)造函數(shù)和析構(gòu)函數(shù)的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-09-09
  • C語言修煉之路一朝函數(shù)思習得?模塊思維世間生上篇

    C語言修煉之路一朝函數(shù)思習得?模塊思維世間生上篇

    函數(shù)是一組一起執(zhí)行一個任務(wù)的語句。每個?C?程序都至少有一個函數(shù),即主函數(shù)?main()?,所有簡單的程序都可以定義其他額外的函數(shù)
    2022-03-03
  • C語言實現(xiàn)三子棋游戲含完整代碼

    C語言實現(xiàn)三子棋游戲含完整代碼

    本文詳細講解了C語言實現(xiàn)三子棋游戲內(nèi)含完整代碼,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 帶你了解C++的動態(tài)內(nèi)存分配

    帶你了解C++的動態(tài)內(nèi)存分配

    今天小編就為大家分享一篇關(guān)于關(guān)于C++動態(tài)分配內(nèi)存的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-08-08

最新評論