Matlab:柱状图饼状图填充不同条纹
1、导入几组数据,通过命令得到柱状图或者饼状图。
示例:以导入txt文件格式为例;
2、弹出柱状图界面和饼状图界面。
可见,柱状图和饼状图为彩色图片,有时我们不要彩色图片,要黑白图像。
对黑白图像如何区分不同类别的数据,就需要往图像里面填充不同的条纹。
3、打开编辑—图形属性,
更改自己所需要的字体,坐标轴范围,图例,线宽等;
也可用命令修改,如:
4、下面就是重点:如何把上述图像转换成黑白图像,并填充不同条纹。
首先,创建名为“applyhatch.m”的函数脚本。
在同一路径下。
代码如下:——复制即可。
function applyhatch(h,patterns,colorlist) %APPLYHATCH Apply hatched patterns to a figure % APPLYHATCH(H,PATTERNS) creates a new figure from the figure H by % replacing distinct colors in H with the black and white % patterns in PATTERNS. The format for PATTERNS can be % a string of the characters '/', '\', '|', '-', '+', 'x', '.' % a cell array of matrices of zeros (white) and ones (black) % % APPLYHATCH(H,PATTERNS,COLORS) maps the colors in the n by 3 % matrix COLORS to PATTERNS. Each row of COLORS specifies an RGB % color value. % % Note this function makes a bitmap image of H and so is limited % to low-resolution, bitmap output. % % Example 1: % bar(rand(3,4)); % applyhatch(gcf,'\-x.'); % % Example 2: % colormap(cool(6)); % pie(rand(6,1)); % legend('Jan','Feb','Mar','Apr','May','Jun'); % applyhatch(gcf,'|-+.\/',cool(6)); % % See also: MAKEHATCH
% By Ben Hinkle, bhinkle@mathworks.com % This code is in the public domain. oldppmode = get(h,'paperpositionmode'); oldunits = get(h,'units'); set(h,'paperpositionmode','auto'); set(h,'units','pixels'); figsize = get(h,'position'); if nargin == 2 colorlist = []; end bits = hardcopy(h,'-dzbuffer','-r0'); set(h,'paperpositionmode',oldppmode);
bwidth = size(bits,2); bheight = size(bits,1); bsize = bwidth * bheight; if ~isempty(colorlist) colorlist = uint8(255*colorlist); [colors,colori] = nextnonbw(0,colorlist,bits); else colors = (bits(:,:,1) ~= bits(:,:,2)) | ... (bits(:,:,1) ~= bits(:,:,3)); end pati = 1; colorind = find(colors); while ~isempty(colorind) colorval(1) = bits(colorind(1)); colorval(2) = bits(colorind(1)+bsize); colorval(3) = bits(colorind(1)+2*bsize); if iscell(patterns) pattern = patterns{pati}; elseif isa(patterns,'char') pattern = makehatch(patterns(pati)); else pattern = patterns; end pattern = uint8(255*(1-pattern)); pheight = size(pattern,2); pwidth = size(pattern,1); ratioh = ceil(bheight/pheight); ratiow = ceil(bwidth/pwidth); bigpattern = repmat(pattern,[ratioh ratiow]); if ratioh*pheight > bheight bigpattern(bheight+1:end,:) = []; end if ratiow*pwidth > bwidth bigpattern(:,bwidth+1:end) = []; end bigpattern = repmat(bigpattern,[1 1 3]); color = (bits(:,:,1) == colorval(1)) & ... (bits(:,:,2) == colorval(2)) & ... (bits(:,:,3) == colorval(3)); color = repmat(color,[1 1 3]); bits(color) = bigpattern(color); if ~isempty(colorlist) [colors,colori] = nextnonbw(colori,colorlist,bits); else colors = (bits(:,:,1) ~= bits(:,:,2)) | ... (bits(:,:,1) ~= bits(:,:,3)); end colorind = find(colors); pati = (pati + 1); if pati > length(patterns) pati = 1; end end
newfig = figure('units','pixels','visible','off'); imaxes = axes('parent',newfig,'units','pixels'); im = image(bits,'parent',imaxes); fpos = get(newfig,'position');
set(newfig,'position',[fpos(1:2) figsize(3) figsize(4)+1]); set(imaxes,'position',[0 0 figsize(3) figsize(4)+1],'visible','off'); set(newfig,'visible','on');
function [colors,out] = nextnonbw(ind,colorlist,bits) out = ind+1; colors = []; while out <= size(colorlist,1) if isequal(colorlist(out,:),[255 255 255]) | ... isequal(colorlist(out,:),[0 0 0]) out = out+1; else colors = (colorlist(out,1) == bits(:,:,1)) & ... (colorlist(out,2) == bits(:,:,2)) & ... (colorlist(out,3) == bits(:,:,3)); return end end
%而applyhatch函数需要调用下面的函数
function A = makehatch(hatch) %MAKEHATCH Predefined hatch patterns % MAKEHATCH(HATCH) returns a matrix with the hatch pattern for HATCH % according to the following table: % HATCH pattern % ------- --------- % / right-slanted lines % \ left-slanted lines % | vertical lines % - horizontal lines % + crossing vertical and horizontal lines % x criss-crossing lines % . single dots % % See also: APPLYHATCH
% By Ben Hinkle, bhinkle@mathworks.com % This code is in the public domain.
n = 6; A=zeros(n); switch (hatch) case '/' A = fliplr(eye(n)); case '\' A = eye(n); case '|' A(:,1) = 1; case '-' A(1,:) = 1; case '+' A(:,1) = 1; A(1,:) = 1; case 'x' A = eye(n) | fliplr(diag(ones(n-1,1),-1)); case '.' A(1:2,1:2)=1; otherwise error(['Undefined hatch pattern "' hatch '".']); end
5、柱状填充图和饼状填充图,画图命令如下:
a=importdata('xxx.txt');
>> b=importdata('xxx.txt');
>> c=importdata('xxx.txt');
>> d=[a,b,c];
>> bar(d);
警告: MATLAB 已通过改用 OpenGL 软件禁用了某些高级的图形渲染功能。欲了解有关详细信息,请点击此处。
>> figure(2)
>> pie(d);
>> axis([0 11 0.0 22]);
>> legend('方法1','方法2','方法3');
>> set(gcf,'color','white');
>> applyhatch(gcf,'x+\.');
6、结果:不同条纹填充结果
柱状图和饼状图
如图所示: