声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4365|回复: 5

[绘图技巧] MATLAB等高线图设置问题求助

[复制链接]
发表于 2011-7-14 12:50 | 显示全部楼层 |阅读模式

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

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

x
最近我编写了一个绘制等高线图的小程序,源代码如下:
clc;clear
A=[...
       0.000113         0.000113      -951.390615
       0.000887         0.000113       532.482376
       0.000887         0.000887       422.830376
       0.000113         0.000887       176.413969
       0.000500         0.000113      -687.738275
       0.000887         0.000500       405.710453
       0.000500         0.000887       224.166964
       0.000113         0.000500      -500.895672
......   
];
[x,y]=meshgrid(0:0.001:0.02,0:0.0005:0.01);
z=griddata(A(:,1),A(:,2),A(:,3),x,y,'v4');
colormap([1.0,1.0,1.0])
[c,h] =contourf(x,y,z,20,'LineWidth',2);
set(gca,'linewidth',2,'fontsize',15,'fontweight','bold');
clabel(c,h,'fontsize',15,'fontweight','bold');
xlabel('x/m','fontweight','bold','fontsize',16);
ylabel('y/m','fontweight','bold','fontsize',16);
axis 'square';
box on;
maximum=A(1,3);
for i=2:1:1800;
   if A(i,3)>maximum;
      maximum=A(i,3);
   end;
end;
minimum=A(1,3);
for i=2:1:1800;   
   if A(i,3)<minimum;
      minimum=A(i,3);
   end;
end;
string=['The maximum/minimum normalized σ(eq) is ' num2str(maximum,3) '/' num2str(minimum,3)];
gtext(string,'fontsize',16,'fontweight','bold')
绘制的结果如附图所示。这里的问题是,在等高线上标注数值的时候,MATLAB默认到小数点后面4位左右,我只想显示小数点后面2位。另外,在标注数值的地方能不能把等高线擦除,这样线就不会和数值交叉了?请问,这些可以实现吗?希望各位大侠不吝赐教,小弟感激不尽!
untitled.jpg

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2011-7-14 21:46 | 显示全部楼层
怎么没有哪位哥会呀?
发表于 2011-7-15 00:29 | 显示全部楼层
本帖最后由 ChaChing 于 2011-7-15 00:31 编辑

下午有小试一下, 还没试成!
还有正事得忙的, 就先说说想法, LZ试先
1.LZ附图好像不同!?
2.好像直接使用contour即可有"等高线擦除"! 使用contourf再colormap([1.0,1.0,1.0])好像不必要
3.小数点位数问题, 试试LevelList/TextList两属性的更动(set/get)
希望方向是对的
 楼主| 发表于 2011-7-15 10:29 | 显示全部楼层
回复 3 # ChaChing 的帖子

首先谢谢ChaChing的热心解答
1、源程序数据太多,我只给出了前面几行,所以出现了“附图”好像不同的问题哈
2、我用contour函数的时候,运行出错,显示Attempt to execute SCRIPT contour as a function. 是不是因为我的z不是x和y的规则函数?
 楼主| 发表于 2011-7-15 12:00 | 显示全部楼层
附上我的源程序txt文件。
我通过使用LevelList命令,可以控制标注的数值范围和有效位数,但是还是没有解决如何在标注数值的地方擦除等值线。我尝试使用BackgroundColor命令讲标注背景置成白色,可以起到擦除等高线的作用,但是在标注多的地方互相重叠,效果不好。请问有没有更加好的解决方法呢?另外,为什么我的contour命令无法使用呢
untitled.jpg

新建 文本文档.txt

90.63 KB, 下载次数: 4

发表于 2011-7-15 15:47 | 显示全部楼层
回复 4 # sunhu2003 的帖子

针对"Attempt to execute SCRIPT contour as a function",
建议使用which contour -all检查下是否有自订m file!?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-29 10:48 , Processed in 0.073707 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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