一、基本绘图
1、plot():二维画图函数
2、xlabel():给x轴添加标签
3、ylabel():给y轴添加标签
4、legend():添加多个函数的标签
5、title():添加标题
具体用法可以通过help指令获取
小知识:plot()函数绘图是通过点进行绘图的,有些x,y两个参数,每个x对应每个y形成每个点,从而形成图像,当没有指定x时,根据y的个数n,x为[1:n]。
举例
x = 0:pi/25:2*pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1,'gd--',x,y2,'rs:');
xlabel("-2\pi \leq x \leq 2\pi",'FontSize',15,'FontWeight','bold','Color','r');
ylabel("sinx and e^{x}",'FontSize',15,'FontWeight','bold','Color','r');
legend('sin(x)','cos(x)');
title('sin and cos');
改进
绘图完成后进行改进:
所显示的图片有三个部分,程序画的线、背景、坐标轴
一个图片可以通过一个handle来指向,用get()函数获取。gca()和gcf()函数分别控制坐标轴和背景。set()函数控制画线。具体用法可通过help指令获取。
举例:
x = 1:100;
y = 1:100;
h = plot(x,y);
annotation('arrow','X',[0 0.4],'Y',[0.7 0.4]);
get(h);
set(h, 'LineStyle','--');
set(h,'Color','red');
set(h,'MarkerSize',12);
ax = gca;
ax.FontSize = 20;
fig = gcf;
fig.Color = 'green';
运行结果如上图。
在一个界面中画多个图
当x相同时y值相差太大,需要在分开画多个图。
figure
x = 0:pi/25:2*pi;
y1 = sin(x);
y2 = exp(x);
figure, plot(x,y1,'gd--');
figure, plot(x,y2,'rs:');
运行结果:
subplot
举例
n = 0:0.1:2*pi;
x = 3*cos(n);
y = sin(n);
subplot(2,2,1);plot(x,y); axis normal;
subplot(2,2,2);plot(x,y); axis square;
subplot(2,2,3);plot(x,y); axis equal;
subplot(2,2,4);plot(x,y); axis equal tight;
运行结果:
小知识:gcf、gca等都是针对current figure的,例如使用figure画多个图时,通过gcf、gca进行改进时都是对最后一个figure进行改进。subplot也是如此。
x=[0:0.1:2*pi];
subplot(3,3,1);
%子图,3行3列,像航后列,(2,2,1)是第一个图
y=sin(x);
plot(x,y,'r--','LineWidth',4),xlabel('x'),ylabel('sinx'),axis([0 2*pi -1 1]),legend('sinx'),title('y=sinx'),grid on,axis equal;
%plot 颜色和线型在同一个参数里,axis前两个书是x的范围,后两个是y,legend,图标,grid on设定网格,axis
%equalxy轴的单位长度一样
subplot(3,3,2);
y2=cos(x);
plot(x,y2,'r--'),xlabel('x'),ylabel('cosx'),axis([0 2*pi -1 1]),legend('cosx');
subplot(3,3,3);
y3=sin(x).*cos(x);
plot(x,y3,'r--'),xlabel('x'),ylabel('sinx*cosx'),axis([0 2*pi -1 1]),legend('sinx*cos');
subplot(3,3,4);
plot(x,y,'r',x,y2,'b'),xlabel('x'),axis([0 2*pi -1 1]),legend('sin(x)','cos(x)');
%命令行输入opengl
%software,可以让图标同时显示文字和线型,注意这里的legend的线形是根据plot里函数的顺序定义的,sin(x)对应的是‘r’
subplot(3,3,5);
plot(x,y2,'r--'),xlabel('x'),ylabel('cosx'),axis([0 2*pi -1 1]),legend('cosx');
hold on;%把第一个图的结果保留
plot(x,y3,'r--'),xlabel('x'),ylabel('sinx*cosx'),axis([0 2*pi -1 1]),legend('sinx*cos');
subplot(3,3,6);
%绘制极坐标图r=2x, 0<=t<=2pi
t=[0:0.01:2*pi];
r=2*t;
polar(t,r,'r--'),legend('r=2t'),title('阿基米德螺线');
subplot(3,3,7);
x7=[0:0.01:20];
y7=exp(-10*x7.^2);
plot(x7,y7,'r','LineWidth',2);
subplot(3,3,8);
loglog(x7,y7,'b','LineWidth',2);
%对比第7、8子图,loglog函数的作用在于通过对坐标的放大缩小显示那些用plot函数不好显示的函数
figure的存储
saveas()函数。具体用法见help
另外若要高精度存储建议使用print存储方式。
针头图
t=[0:5:200];
f = exp(-0.01*t).*sin(t/4);
stem(t,f,'--dg','fill'),xlabel('时间(秒)'),ylabel('弹簧响应');
%fill填充图形
绘图进阶
对数图
logarithm plot
%semilog函数和loglog函数都是通过改变网格的大小来改变坐标轴的刻度
%x:10^-1~10^1 ,100个数
x=logspace(-1,1,100);
y=x.^2;
subplot(2,2,1);
plot(x,y);
%semilog半对数 semilogx()x轴变为对数值
subplot(2,2,2);
semilogx(x,y);
%y变
subplot(2,2,3);
semilogy(x,y);
%xy一起变
subplot(2,2,4);
loglog(x,y);
set(gca,'XGrid','on');
plotyy(X1,Y1,X2,Y2) 绘制 Y1 对 X1 的图,在左侧显示 y 轴标签,并同时绘制 Y2 对 X2 的图,在右侧显示 y 轴标签。
x=0:0.01:10;
y1=200*exp(-0.5*x).*sin(x);
y2=0.8*exp(-0.05*x).*sin(10*x);
%Ax--两个纵坐标轴 H1\H2--两条线
[Ax,H1,H2]=plotyy(x,y1,x,y2);
%get(Ax(1),'Ylabel')返回Ax(1)的属性Ylabel,Ylabel作为对象有属性‘String’,赋值left-y1
set(get(Ax(1),'Ylabel'),'String','left-y1');
set(get(Ax(2),'Ylabel'),'String','right-y2');
set(H1,'color','red','LineStyle','--','LineWidth',2);
set(H2,'color','green','LineStyle',':','LineWidth',2);
histogram函数 直方图
%X = randn(sz1,...,szN) 返回由随机数组成呈现正态分布的 sz1×...×szN 数组,
%其中 sz1,...,szN 指示每个维度的大小。例如:randn(3,4) 返回一个 3×4 的矩阵。
y=randn(1,1000);
subplot(2,1,1);
%直方图,y为数据,横坐标轴是y的值,纵坐标是y的数量,5是柱的数量
hist(y,5);
subplot(2,1,2);
hist(y,50);
Bar函数
%x数组的第一个数为1,第二个数为2
x=[1,2,4,6,8];
%y有两行
y=[x;1,2,3,4,5];
subplot(3,1,1);
bar(x);
subplot(3,1,2);
bar(y);
subplot(3,1,3);
bar3(y);
pie函数画圆饼图
%pie函数画圆饼图
x=[5,10,15,20];
subplot(1,3,1);
pie(x);
polar 画极坐标