1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > matlab bar 填充花纹 转:使用matlab绘画柱状图 且使用不同的图案填充

matlab bar 填充花纹 转:使用matlab绘画柱状图 且使用不同的图案填充

时间:2019-04-04 13:51:09

相关推荐

matlab bar 填充花纹 转:使用matlab绘画柱状图 且使用不同的图案填充

在论文中,图表往往发挥着极为重要的作用,好的图表将能进一步提升论文的质量。在书写论文时,很多时候需要绘制柱状图,然而不同的柱状图如果采用颜色区分,当论文打印以后,视觉效果大打折扣,甚至无法区分。在遇到这个问题时,我通过网站论坛搜索,终于找到了在matlab中绘制柱状图,并采用不同的图案进行表示。主要利用下面的代码。

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@

%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:

%HATCHpattern

%----------------

%/right-slanted lines

%\left-slanted lines

%|vertical lines

%-horizontal lines

%+crossing vertical and horizontal lines

%xcriss-crossing lines

%.single dots

%

%See also: APPLYHATCH

%By Ben

Hinkle, bhinkle@

%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

效果如下图所示

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。