声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1926|回复: 9

[绘图技巧] 请问matlab如何做出下列图形

[复制链接]
发表于 2009-8-17 10:12 | 显示全部楼层 |阅读模式

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

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

x
1  1  2  2  2  3  3  3
1  1  1  2  2  3  3  3
1  4  4  4  2  5  5  5
4  4  4  4  5  5  5  5
4  4  4  4  5  5  5  5

例如上面的数组,请问如何画出不同数字间的边界线(所得图形只需要边界线,不需数字)?
曾经使用contour画出等高线图,但结果并非所需图案。
谢谢!

[ 本帖最后由 Greaf 于 2009-8-17 10:28 编辑 ]

所需画出的图形

所需画出的图形
回复
分享到:

使用道具 举报

发表于 2009-8-20 13:04 | 显示全部楼层
手动画最方便,为什么要用matlab做呢?有何实际意义?
 楼主| 发表于 2009-8-22 15:16 | 显示全部楼层
手动画不方便的。。。因为用到的至少是200*200以上大小的矩阵。
因为之前是用matlab做晶粒长大方面的模拟,需要画出的那些边界线就是模拟意义上的晶界,所以想看看matlab是否能实现这种结果。
发表于 2009-8-22 22:30 | 显示全部楼层

回复 楼主 Greaf 的帖子

矩阵怎绘图?
 楼主| 发表于 2009-8-23 14:54 | 显示全部楼层
er  是想说明我目前做的模拟是在200*200大小的数组中,由rand生成随机数后按照一定的规则进行运算,所以所得结果还是比较复杂,不能用手画出来的,附件所附图形只是示意简图。
matlab能否做出上面所说的分界线呢?
之前我是用contour作等高线,但数组一复杂后,图形就会出现一些不应该出现的空白区,目前还是无法解决。。。不过看到文献说OpenGL能实现这要求,但那个我还没用过。。。
发表于 2009-8-23 21:28 | 显示全部楼层

回复 5楼 Greaf 的帖子

OpenGL只是一种显示支持的平台,具体的算法实现还得自己想。我觉得可以自己想想怎么用matlab实现——不要太寄希望于matlab一个命令就搞定,可能会比较复杂。
发表于 2009-8-24 17:06 | 显示全部楼层
提供给你一个思路,image函数可以完成要求,不过需要做改动,然后自己写个描边的函数。
这个是用很笨的方法绘制的边,不过也说明可以用这种方式解决的
A=[1 1 2 2 2 3 3 3;1 1 1 2 2 3 3 3;1 4 4 4 2 5 5 5;4 4 4 4 5 5 5 5;4 4 4 4 5 5 5 5];
imagesc(A);hold on;
X1=[.5 1.5 1.5 4.5 4.5 5.5 5.5 8.5];Y1=[3.5 3.5 2.5 2.5 3.5 3.5 2.5 2.5];
X2=[2.5 2.5 3.5 3.5 4.5 4.5];Y2=[0.5 1.5 1.5 2.5 2.5 5.5];
X3=[5.5 5.5];Y3=[0.5 2.5];
line(X1,Y1,'Color','k','LineWidth',5);
line(X2,Y2,'Color','k','LineWidth',5);
line(X3,Y3,'Color','k','LineWidth',5);
111111.JPG

一定可以做出来,你可以传一组200*200实验数据上来,我试试看

[ 本帖最后由 ChaChing 于 2009-8-26 19:39 编辑 ]

评分

2

查看全部评分

 楼主| 发表于 2009-8-26 15:51 | 显示全部楼层
啊,非常感谢,我先自己尝试一下吧
再次表示感谢!
 楼主| 发表于 2009-8-28 21:14 | 显示全部楼层
今天突然得到个灵感,不知这个能不能理解为识别数字的问题
逐行扫描,当扫描到数字与上一个数字不同的时候插入“|”或“—”
这样会不会可行嘞?
 楼主| 发表于 2009-8-30 11:25 | 显示全部楼层
%v为矩阵
imagesc(v);
hold on;
%l为line,r为row
%hx,hy为矩阵行、列数
for l=1:hx
    for r=1:hy
        x1=[];x2=[];y1=[];y2=[];
        if r~=hy
            if v(l,r)~=v(l,r+1)
                x1=[l-0.5,l+0.5];
                y1=[r+0.5,r+0.5];
                line(y1,x1,'Color','k','LineWidth',3)
            end
        end
        if l~=hx
            if v(l,r)~=v(l+1,r)
                x2=[l+0.5,l+0.5];
                y2=[r-0.5,r+0.5];
                line(y2,x2,'Color','k','LineWidth',3)
            end
        end
    end
end

再次感谢花如月兄提示,谢谢

另,请教一下,image或imagesc可否设置各区域颜色?我找到的书籍及PDF对这两个函数都几乎没有提及

[ 本帖最后由 ChaChing 于 2009-8-30 12:26 编辑 ]

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-16 23:41 , Processed in 0.074466 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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