声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 9113|回复: 11

[图像处理] 改变grid颜色/线宽的函数

[复制链接]
发表于 2005-6-24 10:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function gridcolor(xc,yc);
% GRIDCOLOR change the color of the axes
% xc is the color of x-axes direction
% yc is the color of y-axes direction
% Example:
% plot(1:10); grid on; gridcolor('r','b');
% Author's email:zjliu2001@163.com
% See also grid,plot,title,xlabel.
if nargin==0, xc='k';yc='k';
elseif nargin==1; yc=xc;
   if ~strcmp('char',class(xc)); error('the class of xc must char!'); end
elseif nargin==2;
   if ~strcmp('char',class(xc)); error('the class of xc must char!'); end
   if ~strcmp('char',class(yc)); error('the class of yc must char!'); end
elseif nargin==3;
   error('this program is applied to 2-D axes!');
end
xs=get(gca,'xgrid'); ys=get(gca,'ygrid');
if strcmp(xs,'on')
   hold on; set(gca,'xgrid','off'); changeC(xc,'x'); hold off;
end
if strcmp(ys,'on')
   hold on; set(gca,'ygrid','off'); changeC(yc,'y'); hold off;
end


function changeC(zc,ss);
if ss~='x' & ss~='y', error('ss must "x" or "y"!'); end
S=[ss,'tick']; Da=get(gca,S); Li=get(gca,[ss,'lim']);
if ss=='x'
   for k=2:length(Da)-1, plot([Da(k),Da(k)],Li,':','color',zc); end
else
   for k=2:length(Da)-1, plot(Li,[Da(k),Da(k)],':','color',zc); end
end


[ 本帖最后由 ChaChing 于 2010-2-12 10:42 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2005-6-24 11:25 | 显示全部楼层

改变grid线宽的函数

在紫丁香站发现有人提出这个问题,zjliu 使用plot函数栽了一个小函数,来实现改变grid线宽。程序如下:
function [hx,hy]=gridxy(linewidth,xy);
% GRIDXY add grid to the axes
% linewidth is the width of grid's line;
% xy defines grid's direction
% Example:
% plot(1:10); [hx,hy]=gridxy([2,1],'xy');

% Author's email:zjliu2001@163.com
% See also grid,plot,gca
xk=get(gca,'xtick'); yk=get(gca,'ytick'); xl=xlim; yl=ylim; hold on;
if nargin==1, xy='x'; end
if xy=='x', hx=plotx(xk,xl,yl,linewidth(1)); hy=[];
elseif xy=='y'; hy=ploty(yk,xl,yl,linewidth(end)); hx=[];
else hx=plotx(xk,xl,yl,linewidth(1)); hy=ploty(yk,xl,yl,linewidth(end));
end
hold off;
function H=plotx(xk,xl,yl,linewidth);
H=[];
for k=1:length(xk); if xk(k)~=xl(1)&xk(k)~=xl(end);
   h=plot([xk(k),xk(k)],yl,'k:','linewidth',linewidth); H=[H,h];
end; end
function H=ploty(yk,xl,yl,linewidth);
H=[];
for k=1:length(yk); if yk(k)~=yl(1)&yk(k)~=yl(end);
   h=plot(xl,[yk(k),yk(k)],'k:','linewidth',linewidth); H=[H,h];
end; end




[ 本帖最后由 ChaChing 于 2010-2-12 13:43 编辑 ]
发表于 2010-2-12 13:46 | 显示全部楼层
整理下老帖, 顺便修改练习下!

  1. function GridColor(xc,yc)
  2. % GRIDCOLOR change the color of the axes
  3. % xc/yc is the color of x/y-axes direction
  4. % Example: plot(1:10); grid on; GridColor('r','b');
  5. if nargin==0, xc='k';yc='k';
  6. elseif nargin==1, yc=xc;
  7.    if ~ischar(xc), error('the class of xc must char!'); end
  8. elseif nargin==2,
  9.    if ~ischar(xc), error('the class of xc must char!'); end
  10.    if ~ischar(yc), error('the class of yc must char!'); end
  11. else error('this program is applied to 2-D axes!'); end
  12. hold on; set(gca,'xgrid','off'); set(gca,'ygrid','off');
  13. changeC(xc,'x'); changeC(yc,'y'); hold off;
  14. function changeC(zc,ss)
  15. if ss~='x' & ss~='y', error('ss must "x" or "y"!'); end
  16. S=[ss,'tick']; Da=get(gca,S); Li=get(gca,[ss,'lim']);
  17. if ss=='x'
  18.    for k=2:length(Da)-1, plot([Da(k),Da(k)],Li,':','color',zc); end
  19. else
  20.    for k=2:length(Da)-1, plot(Li,[Da(k),Da(k)],':','color',zc); end
  21. end
复制代码

  1. function [hx,hy]=GridXY(linewidth,xy)
  2. % GRIDXY add grid to the axes
  3. % linewidth is the width of grid's line; xy defines grid's direction
  4. % Example: plot(1:10); [hx,hy]=GridXY([2,1],'xy');
  5. xk=get(gca,'xtick'); yk=get(gca,'ytick'); xl=xlim; yl=ylim; hold on;
  6. if nargin==1, xy='x'; end
  7. if xy=='x', hx=plotx(xk,xl,yl,linewidth(1)); hy=[];
  8. elseif xy=='y', hy=ploty(yk,xl,yl,linewidth(end)); hx=[];
  9. else hx=plotx(xk,xl,yl,linewidth(1)); hy=ploty(yk,xl,yl,linewidth(end));
  10. end; hold off;
  11. function H=plotx(xk,xl,yl,linewidth)
  12. H=[];
  13. for k=1:length(xk), if xk(k)~=xl(1) & xk(k)~=xl(end),
  14.    h=plot([xk(k),xk(k)],yl,'k:','linewidth',linewidth); H=[H,h];
  15. end; end
  16. function H=ploty(yk,xl,yl,linewidth)
  17. H=[];
  18. for k=1:length(yk), if yk(k)~=yl(1) & yk(k)~=yl(end),
  19.    h=plot(xl,[yk(k),yk(k)],'k:','linewidth',linewidth); H=[H,h];
  20. end; end

复制代码

评分

1

查看全部评分

发表于 2010-3-27 23:59 | 显示全部楼层

如何调整Grid 线宽?

我现在需要设置 Box 'LineWidth=1.5' ;  Grid 'LineWidth=0.5'
e=[0.3759    0.1078    0.0066    0.0032   0.0023]; n=[16    25    36    81   121];
plot(n,e); [hx,hy]=gridxy([1,1],'xy');

用这种方法得出的图像,在线性坐标下,可以在图像属性里任意设置 Box 的线宽。 但是如果我把坐标轴都改成对数坐标,所有的grid 都自动消失了?
再次在图像属性里添加 X 和Y 方向的Grid ,则不能单独设置Grid 线宽。 不知道大家能不能帮忙找一下原因! 谢谢各位!

我需要如下图形

Box 线宽1.5和 Grid 线宽0.5

Box 线宽1.5和 Grid 线宽0.5


[ 本帖最后由 ChaChing 于 2010-3-28 21:40 编辑 ]
发表于 2010-3-28 01:34 | 显示全部楼层

回复 地板 penghust 的帖子

试了下, 没问题!? LS怎调用函数? 出错代码?
发表于 2010-3-28 16:14 | 显示全部楼层

回复 5楼 ChaChing 的帖子

运行过程没有错误, 运行如下程序
e=[0.3759    0.1078    0.0066    0.0032   0.0023]; n=[16    25    36    81   121];
plot(n,e); [hx,hy]=gridxy([1,1],'xy');
得到的图像为线性坐标,X,Y方向Grid 线宽为 1,1
-----打开 'Proparty editor‘--axas'----
'X Axis' -- 'X Scale' 设为log---然后Y方向 Grid 自动消失
'Y Axis' -- 'Y Scale' 设为log---然后X方向 Grid 自动消失
然后打开 ‘More Properties’----- 'LineWidth'----设置为'1.5'--XGrid on--YGrid on
--得到的 X,Y方向Grid 线宽自动设置为 '1.5‘

[ 本帖最后由 ChaChing 于 2010-3-28 21:44 编辑 ]
发表于 2010-3-28 16:57 | 显示全部楼层
发现一个有趣的现象,运行3楼例子
Example: plot(1:10); [hx,hy]=GridXY([0.5,0.5],'xy');
然后将
'X Axis' -- 'X Scale' 设为log
'Y Axis' -- 'Y Scale' 设为log
X,Y方向Grid 并未消失
打开 ‘More Properties’----- 'LineWidth'----设置为'1.5',此时Box 线宽变为 1.5
X,Y方向Grid 线宽并未改变,仍然为0.5.

如果再运行
Example:  plot(1:20);      [ hx,hy]=GridXY([0.5,0.5],'xy');
然后将X,Y 坐标轴改为 对数坐标,在6楼所描述的现象再次出现。

评分

1

查看全部评分

发表于 2010-3-28 21:37 | 显示全部楼层
昨天我是这样用
e=[0.3759    0.1078    0.0066    0.0032   0.0023];
n=[16    25    36    81   121];
loglog(n,e); [hx,hy]=gridxy([2,2],'xy');
个人很少使用那些面板(旧版没这些功能), LZ说的正在看看中!

[ 本帖最后由 ChaChing 于 2010-3-28 21:38 编辑 ]
发表于 2010-3-29 11:40 | 显示全部楼层
对上面的程序做了简单修改,现在可以实现任意设置 Box 和 Grid 线宽
e=[0.3759    0.1078    0.0066    0.0032   0.0023];
n=[16    25    36    81   121];
loglog(n,e); [hx,hy]=gridxy([0.5,0.5],'xy');

function [hx,hy]=gridxy(linewidth,xy)
% GRIDXY add grid to the axes
% linewidth is the width of grid's line; xy defines grid's direction
% Example: plot(1:10); [hx,hy]=gridxy([2,1],'xy');
xk=get(gca,'xtick'); yk=get(gca,'ytick'); xl=xlim; yl=ylim; hold on;
if nargin==1, xy='x'; end
if xy=='x', hx=plotx(xk,xl,yl,linewidth(1)); hy=[];
elseif xy=='y', hy=ploty(yk,xl,yl,linewidth(end)); hx=[];
else hx=plotx(xk,xl,yl,linewidth(1)); hy=ploty(yk,xl,yl,linewidth(end));
end; hold off;
function H=plotx(xk,xl,yl,linewidth)
H=[];
for k=1:length(xk), if xk(k)~=xl(1)                            %在此处做了修改
   mxk=xk(k-1):xk(k-1):xk(k);                                   %在相隔的两个刻度之间设置细分刻度 MiniGrid
   for kk=1:length(mxk)                                                
       h=plot([mxk(kk),mxk(kk)],yl,'k:','linewidth',linewidth); H=[H,h];   
   end                                                                     
end; end
function H=ploty(yk,xl,yl,linewidth)
H=[];
for k=1:length(yk), if yk(k)~=yl(1)                            %在此处做了修改
    myk=yk(k-1):yk(k-1):yk(k);                                  %在相隔的两个刻度之间设置细分刻度 MiniGrid
   for kk=1:length(myk)                                                   
       h=plot(xl,[myk(kk),myk(kk)],'k:','linewidth',linewidth); H=[H,h];   
   end                                                                     
end; end

通过上面的程序,可以实现对 Grid 设置线宽,线型。修改了1楼的程序,可以实现在相隔刻度之间,设置细分刻度的功能。
谢谢 ChaChing的帮助:handshake
发表于 2010-3-29 16:12 | 显示全部楼层

回复 8楼 ChaChing 的帖子

ChaChing
你对句柄图形有研究没?
或者对句柄图形有研究的版内兄弟一起讨论一下。
是否可通过 get() ,  set()  对句柄图形对象进行设置?
关键是能否通过 get() 分别得到 Box 和 Grid 的句柄??
然后对 Box 和 Grid 的线宽进行单独设置?
发表于 2010-3-29 17:26 | 显示全部楼层
box和grid都是axes的属性,它和坐标轴是一体的,而非父子对象关系。grid 和box都和坐标轴连在一起了,硬要设置属性改动的话,坐标轴也会跟着改。譬如下面的代码:

  1. plot(rand(100,1),rand(100,1),'*','color','k')
  2. grid on
  3. set(gca,'xcolor','r');
  4. set(gca,'ycolor','b');
  5. set(gca,'linewidth',5);
复制代码
得到下面图形:
111.jpg

评分

1

查看全部评分

发表于 2010-3-30 00:52 | 显示全部楼层
help中有 Handle Graphics Property Browser!
好多可以更改!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-2 23:33 , Processed in 0.297807 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表