matlab斜线填充直方图,matlab能用applyhatch画出斜线填充的直方图,但是却不是无损的,这样子的图没办法放进论文里面呀...

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

main.m文件如下:

data=cost_compare(1:20,:);

bar(data,1);

axis([0 21 0.0 40]);

legend('DI demand','DT demand');

%set(gca,'XTickLabel',1:20);

set(gca,'FontSize',14);%只能同时改变x y轴显示的字体大小;

set(gca, 'LineWidth',1);

set(gcf,'color','white')

applyhatch(gcf,'\.x.');

画出的图是下面这样的:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

失真的很厉害,是对图片的再处理,我搜了好久,没有很好地处理方案,此处mark一下,如果有好的解决方案,再回来更新!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中,可以使用不同的方法来实现柱状填充。其中一种方法是使用hatchfill2工具,该工具提供了几种不同的填充纹理样式,可以通过在原始堆叠的基础上添加不同的纹理来解决颜色区分不够而导致的对象识别困难问题\[1\]。另一种方法是使用applyhatch函数,该函数可以在柱状上应用不同的填充纹理样式\[2\]。还有一种方法是使用applyhatch_plusC函数,该函数可以在柱状上应用填充纹理样式,并且可以自定义填充颜色\[3\]。 在具体实现柱状填充时,可以使用bar函数绘制柱状,然后使用text函数在柱状上添加数值标签。可以使用grid on函数添加网格线,使用set函数设置X轴显示和y轴名称,使用legend函数设置例。最后,可以使用applyhatch函数或applyhatch_plusC函数对柱状填充,选择合适的填充纹理样式\[2\]\[3\]。 请注意,具体的代码实现可能会根据具体需求和数据行调整。 #### 引用[.reference_title] - *1* *3* [【MATLAB基础绘第2棒】绘制柱状/饼填充](https://blog.csdn.net/qq_44246618/article/details/120686376)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [matlab柱状填充](https://blog.csdn.net/u013036495/article/details/93140469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值