所有偷过的懒,都会变成嘴巴抽回自己!
[matlab 画图详解](http://blog.csdn.net/chw1989/article/details/6894107)
基本绘图函数
创建曲线
曲线函数plot有不同的形式:
- plot(y)其中y是一个向量,分段输出向量y关于列数的图像
- plot(x,y),输出向量y关于x的图像
>> x=0:pi/100:2*pi;
>> y=sin(x);
>> plot(x,y)
>> xlabel('x=0:2\pi')
>> ylabel('Sine of x')
>> title('plot of the Sine Function','FontSize',12)
在一张图上显示多组数据图
下面用一行代码在一张图上输出共享x-y坐标的3个图,并用颜色进行区分,进行图例标注:
>> x=0:pi/100:2*pi;
>> y=sin(x);
>> y2=sin(x-.25);
>> y3=sin(x-.5);
>> plot(x,y,x,y2,x,y3)
>> legend('sin(x)','sin(x-.25)','sin(x-.5)')
指定线型和颜色
plot(x,y,’color_style_marker’)
比如,这个代码表示,用“:”线性画图,在没个数值点用“+”标记:
>> plot(x,y,'r:+')
具体用法可见下表:
划线和标记
如果制定了标记符号,但没有指定线型,画出来的图像只有点没有线。比如下面的例子,用黑色方块把点描出来了,但是没有连成线。
>> plot(x,y,'ks')
每10个数据标记一个点:
>> x1=0:pi/100:2*pi;
>> x2=0:pi/100:2*pi;
>> x2=0:pi/10:2*pi;
>> plot(x1,sin(x1),'r:',x2,sin(x2),'r+')
绘制虚数图像
绘制虚数图像的时候,如果是多参数输入plot(x,y)形式,matlab自动省略虚部;如果是单参数输入plot(z)形式,则会被拆成实部和虚部,即等效于plot(real(z),imag(z))
>> t=0:pi/10:2*pi;
>> plot(exp(i*t),'-o')
>> axis equal %让图像横纵坐标轴等长
在既有图上添加新图(共用坐标轴)
使用hold on语句。
>> [x,y,z]=peaks;
>> surf(x,y,z) %绘制填充颜色的表面图
>> shading interp %去除网格线
>> hold on
>> contour3(x,y,z,20,'k') %添加轮廓图
>> hold off
创建图形窗口
一般在你作图的时候会自动生成一个新图形窗口,你也可以自己创建一个新的(其中n为序号不是数量):
>> figure(n)
在一张图上展示多个图
>> x=0:pi/20:2*pi;
>> subplot(3,1,1);plot(sin(x))
>> subplot(3,1,2);plot(cos(x))
>> subplot(3,1,3);plot(sin(x).*cos(x))
控制坐标轴
坐标轴命令axis提供了可以设置刻度、方向、量程、宽高比(aspect ratio)的选项。
自动生成轴的量程&刻度线
默认情况下,matlab会找到数据的最大最小值来确定轴的范围,也可手动设置xlim,ylim,zlim。改某一个轴的时候其他轴可能也会受影响,可以通过图形窗口的“编辑→坐标轴属性”进行修改。
手动设置量程
强制设定:
axis([xmin xmax ymin ymax zmin zmax])
恢复自动:
axis auto
手动设置宽高比
matlab里预设好了一些宽高比,例如:
axis square %x轴和y轴长度相同
axis equal %让x和y轴单位刻度长度相同
axis auto normal %恢复默认状态
坐标轴的可见性visibility
axis on %让轴可见
axis off %让轴不可见
设置网格
设置图像后面的网格
grid on %让网格可见
grid off %让网格不可见
添加轴坐标和图标题
下面这个栗子绘制了一个图像并且增强了展示的内容:
>> t=-pi:pi/100:pi;
>> y=sin(t);
>> plot(t,y)
>> axis([-pi pi -1 1])
>> xlabel('-\pi \leq {\itt} \leq \pi')
>> doc {\itt}
>> ylabel('sin(t)')
>> title('Graph of the sine function')
>> text(0.5,-1/3,'{\itNote the odd symmetry.}')
图形标注可以使用字母,数字,汉字或按规定的方法表示希腊字母,如\pi表示π,\leq表示≤,\it表示斜体字,FontSize表示字体的大小, FontName表示字体的类型等。
保存图像
图片
在图像窗口“文件→另存为”,选择jpg、png、TIFF都可以。
注意:下次保存的时候还会按照上次保存的格式进行存储。
或者用savefig保存成.fig格式的文件,下次可以用openfig函数打开。也可以用imread函数
代码
哇塞,还可以用“文件→生成代码”导出代码文件,用于之后绘图。
工作区
保存:“文件→保存工作区”
打开:“文件→导入数据”
创建网格图和表面图
关于网格图和表面图
mesh和surf函数都能绘制三维函数图像,其中mesh只绘制定义了的数据点及其之间的连接线;surf不仅绘制连线,而且对图像进行着色。
可视化两个变量的函数
z=f(x,y)
- 首先生成X和Y的矩阵,对应定义域内的各个点的横纵坐标值
- 用X和Y估计函数值
meshgrid函数用于将X和Y匹配起来,具体来讲,不妨认为x是代表横坐标的行向量(1×n),y是代表纵坐标的列向量(m×1),则[X,Y]=meshgrid(x,y)将生成两个矩阵,分别为m×n的X和Y,其中X表示将x复制m行,Y表示将y复制n列。
绘制sinc函数
sinc函数——sin(r)/r
其中r是到原点的距离
>> [X,Y]=meshgrid(-8:.5:8);
>> R=sqrt(X.^2+Y.^2)+eps;
>> Z=sin(R)./R;
>> mesh(X,Y,Z)
为曲面图着色
①绘制sinc函数的曲面图②定义一套色表③添加颜色图例
每一块小曲面的颜色由Z的值决定。
>> [X,Y]=meshgrid(-8:.5:8);
>> R=sqrt(X.^2+Y.^2)+eps;
>> Z=sin(R)./R;
>> surf(X,Y,Z)
>> colormap hsv
>> colorbar
曲面图透明化
在前面的代码后面加上这句:
alpha在0~1之间,越接近0越透明。
>> alpha(.4)
纯色绘图
>> [X,Y]=meshgrid(-8:.5:8);
>> R=sqrt(X.^2+Y.^2)+eps;
>> Z=sin(R)./R;
>> surf(X,Y,Z,'FaceColor','red','EdgeColor','none')
>> camlight left
>> lighting phong
操纵图像
点击这个按钮之后,可以拖着图像各种翻滚,各种方向观察!天啦噜,怎么早没学会用这个软件啊!!
展示图片
图片型数据
打开durer.mat文件,这是一个二进制文件,用于保存变量
>> load durer
>> whos
Name Size Bytes Class Attributes
X 648x509 2638656 double
caption 2x28 112 char
map 128x3 3072 double
>> imshow(X)
>> colormap(map)
打印 (略)
处理图表对象
图表对象
常见的图形对象
每当你利用函数创建一个图标的时候,matlab建立一个具有层级的图标对象。比如用plot函数会创建这些对象:
- 图表:用于呈现坐标轴、菜单和工具栏的一个窗口
- 轴:坐标轴、坐标系
- 线 :呈现通过plot输入的数据
- 文字 :坐标轴标签、注释、图例等
查看对象属性
>> x=1:10;
>> y=x.^3;
>> h=plot(x,y);
>> h.Color='red'; %等效于h=plot(x,y,'Color','red');
>> h.LineWidth
ans =
0.5000
可以将plot输出的结果赋给一个变量,可见图形在matlab世界里也是以变量和矩阵形式存储的。
查看对象属性
>> get(h) %返回h变量的各种属性值表
>> set(h) %返回h各属性的可选值表
设置对象属性
(1)用set函数可以一次设置多个对象的相同属性。
例如:将每个数据点标记成绿色的方块,然后将矩阵中第一列数据点连线加粗
>> y=magic(5);
>> h=plot(y);
>> set(h,'Marker','s','MarkerFaceColor','g')
>> h(1).LineWidth=2;
>> y(:,1)
ans =
17
23
4
10
11
(2)可以给不同属性赋不同的值
需要建立两个cell array,一个用于存储属性名prop_name,另一个存储属性值prop_values。
>> figure
>> y=magic(5);
>> h=plot(y);
>> prop_name(1)={'Marker'};
>> prop_name(2)={'MarkerFaceColor'};
>> prop_values(1,1)={'s'};
>> prop_values(1,2)={h(1).Color};
>> prop_values(2,1)={'d'};
>> prop_values(2,2)={h(2).Color};
>> prop_values(3,1)={'o'};
>> prop_values(3,2)={h(3).Color};
>> prop_values(4,1)={'p'};
>> prop_values(4,2)={h(4).Color};
>> prop_values(5,1)={'h'};
>> prop_values(5,2)={h(5).Color};
>> set(h,prop_name,prop_values)
面向对象的一些函数(用到自己查吧)
通过参数传递
function plotFunc(x)
y=1.5*cos(x)+6*exp(-.1*x)+exp(.07*x).*sin(3*x);
ym=mean(y);
hfig=figure('Name','Function and Mean');
hax=axes('parent',hfig);
plot(hax,x,y)
hold on
plot(hax,[min(x) max(x)],[ym ym],'Color','red')
hold off
ylab=hax.YTick;
new_ylab=sort([ylab,ym]);
hax.YTick=new_ylab;
title('y=1.5cos(x)+6e^{-0.1x}+e^{0.07x}sin(3x)')
xlabel('X Axis')
ylabel('Y Axis')
end
>> x=-10:.005:40;
>> plotFunc(x)
找到既有对象的特定属性
>> plot(rand(5),'r:')
>> h=findobj('Type','line','Color','r','LineStyle',':');
>> h
h =
5×1 Line 数组:
Line
Line
Line
Line
Line
限定搜索范围
>> h=findobj(gca,'Type','text','String','\pi/2');