隐函数绘制并提取数据
转贴来自:
http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=212297&fromuid=606452
这里直接给出一个例子,就可以看出ezplot提取数据的法子。
简单采用y=x^3这个函数:
- >> subplot(121)
- >> h1=ezplot(‘x^3’,[-6 6]);
- >> subplot(122)
- >> h2=ezplot(‘y-x^3’)
![1](https://img-blog.csdn.net/20170510135003407?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc25pa2VybGlp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
从图形曲线上看,采用两种方式绘制出来图形有一定的差别:
第一是取值区间,一个变量绘制出来的y轴是自适应的,而两个变量绘制出来的图y轴是默认区间;
第二就是曲线的颜色了,一个变量绘制出来的是蓝色曲线,而两个变量绘制出来图形是绿色曲线。
利用命令查看两条曲线的属性:
- >> get(h1,’type’)
- ans =
- line
- >> get(h2,’type’)
- ans =
- hggroup
- >>
这时候可以利用get函数调出h1和h2两条曲线的全部属性,查看曲线的数据存储的位置,这里就不写属性了,内容太多,有兴趣的可以自己调出看看。可以发现h1的数据直接存储在Xdata、Ydata中,而h2的数据则存储在contourMatrix中;知道了数据的存储位置,就好办了,直接可以调出使用了。
- >> x=get(h1,’Xdata’);
- >> y=get(h1,’Ydata’);
- >> C=get(h2,’contourMatrix’);
- >> X=C(1,2:end);
- >> Y=C(2,2:end);
- >> subplot(121)
- >> plot(x,y,’r’)
- >> subplot(122)
- >> plot(X,Y,’color’,[0 0.5 1])
- >>
为什么提取数据时候要从C矩阵中的第二个数据开始呢?这可以查看调出来的C矩阵数据,可以看出,C矩阵的第一列存储着数据点的信息,第一个为0,我认为它是查找曲线的条数的标志点,第二个数据为曲线数据点的数目;这两个数据可以在有多条曲线时候区别每条曲线的数据作为标志。
后来又看见了别人的方法,对比之下发现上面的法子比较笨:
可以直接利用H=findobj(gca,’type’,’patch’)得到每条曲线句柄的集合,然后直接从句柄的Xdata、Ydata可以得到每条曲线数据点的值;这个方法可以见附件里面整理的。
更多可见我整理的一个文档:
望大家指正!