matlab 画图, for 循环,用hold on每次循环都添加一条曲线,但是legend(×)会把上次的覆盖,如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 画图, for 循环,用hold on每次循环都添加一条曲线,但是legend(×)会把上次的覆盖,如何解决?相关的知识,希望对你有一定的参考价值。

例如:
figure; hold on;
for I = 1:n
plot(*****); legend(****);
end
hold off;

画完图形后,在plot(或者其他画图函数)最后面,根据你需要画图的个数使用lengend('1**','2**',....,'n**')即可。 参考技术A 例:for i=1:N

name=num2str(i
)
lgnamei=[name,'次计算']
plot(i,f(i));legend(lgname)
end
参考技术B 改为:(以3为例)
figure;
for I = 1:3
plot(*****);
hold on
end
legend('1','2','3');
参考技术C 只有画完图之后才能legend。

matlab 画图 三元函数

|x|+|y|+|z|=1这个图形用matlab怎么画呢?(最好有程序)
谢谢啦!!!!!!

首先考虑了用隐函数生成图像,函数如下

>> ezsurf('(abs(x)+abs(y)-1).*((abs(x)+abs(y))<1)',[-1 1 -1 1 ])

>> hold on

>> ezsurf('-(abs(x)+abs(y)-1).*((abs(x)+abs(y))<1)',[-1 1 -1 1 ])

>> axis equal

>> view(-30,10);

>> 

图片如图所示,不过存在一个没法解决的问题,就是显示范围,这个隐函数在

[-1 1 -1 1]整个范围内都能算出值,虽然在我把xy超出范围的值都置0了,不过0也能画出来。

想了半天也想不出来怎么把筛选矩阵abs(x)+abs(y))<1的0都变成NaN,因为不能直接一个语句就表达出来。

画这个东西还有个方法,就是用patch,这个函数是能画出一系列的多边形,你可以直接用这个函数画8个三角形出来。 

用patch的方法我写了一个m函数,很简单

function point

p=[1 0 0;0 -1 0;-1 0 0;0 1 0;0 0 1 ;0 0 -1];

v=[1 2 6;1 4 6;2 3 6;3 4 6;1 2 5;1 4 5;2 3 5;3 4 5];

clf;

patch('faces',v,'vertices',p,'facevertexcdata',jet(8),'facecolor','flat');

axis equal;

axis([-1 1 -1 1 -1 1]);

grid on;

view(-20,10);

参考技术A 这明显是一个曲面方程
所以二三楼的plot用错了
至少应该用surf
不过我们可以分析该式子的几何意义:
在空间中某一点到原点O的距离R的5次方即:[(R^2)^2.5]
等于该点的z坐标的3次方,z>0有意义
R^5=Z^3
应该想象得到该曲面应该是一个z为轴的旋转曲面
可以得到旋转母线的方程
r=sqrt(z^(3/5)-z^2);
%%%%%%%%%%%%%%%%%%%%
z=0:0.1:10;
r=sqrt(z.^.(3./5)-z.^2);
然后用cylinder函数一部搞定
具体的参数写法查一下help,因为我很久没用这个函数了
%%%%%%%%%%%%%%%%%%%%%
>>z=0:0.1:10;
>>r=sqrt(z.^(3/5)-z.^2);
>>[x,y,z]=cylinder(r);
>>surf(x,y,z)
>>axis([-11-110.1])
参考技术B

%定义函数f(x,y,z)=|x|+|y|+|z|-1

f=@(x,y,z)abs(x)+abs(y)+abs(z)-1;

%生成网格

t=linspace(-1,1,25);

[x,y,z]=meshgrid(t,t,t);

v=f(x,y,z);

%用isosurface绘制隐函数

h=isosurface(x,y,z,v,0);

p=patch(h);

set(p,'facevertexcdata',jet(size(h.vertices,1)),'edgecolor','flat','facecolor','w');

view(3);axis equal

参考技术C 这是二元函数 参考技术D   先用meshgrid形成XYZ三轴的矩阵,然后用slice(X,Y,Z,A,B,C)ABC分表表示XYZ所且的横截面,只要切的细一点,看起来就是个完整的图,比如ABC都取1:0.01:2,就表示数据从1到2,步长0.01切一个横截面,这么多面放在一起就是一个完整的图;
  参考如下:
  [K,H,E] = meshgrid(-1:.25:1,2:-.25:0,5:1:30);
  v = K.*exp(-K.^2-H.^2-E.^2);
  xslice = [1];
  yslice = [ ];
  zslice = [5,20];
  hx=slice(K,H,E,v,xslice,yslice,zslice);
  set(hx,'FaceColor','interp','EdgeColor','none')
  %colormap hsv;
  %shading interp;
  xlabel('K');
  ylabel('H');
  zlabel('E');
  %grid off
  whitebg('w')

以上是关于matlab 画图, for 循环,用hold on每次循环都添加一条曲线,但是legend(×)会把上次的覆盖,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab for循环subplot画图加标题

matlab 画图 三元函数

matlab画图如何清除图中的一部分

Matlab中如何在一幅图中画很多条曲线?

Matlab 2008a 中的保持问题

torch系列:如何实现像matlab那样的hold on