matlab绘图总结1

数值绘图:

x=-15:15;
y=x.*sin(x);
plot(x,y)

函数绘图:

fplot('sin(x^2)/x',[-8,8],'.')

ezplot('tan(5*x)',[0,5])

二维绘图细节参数:

点型:. o x + *为点符号,^ v > <为三角符号,s(square)方块,d(diamond)菱形,p(pentagram)五角星,h(hexagram)六角星
线型:-实线,:点线,-.点划线,--虚线
颜色:r:Red,g:green,b:blue,c:cyan,m:magenta,y:yellow,k:black,w:white
另外我们可以通过下面四个属性设置标识符的颜色和大小

LineWidth——指定线宽

MarkerEdgeColor——指定标识符的边缘颜色

MarkerFaceColor——指定标识符填充颜色

MarkerSize——指定标识符的大小

x=[-1.2 0 1.3 1.4 1.6 2.1 2.3 2.9 3.4 4.5 5.6]
plot(x,'p')

plot(x,'p','LineWidth',2,'MarkerEdgeColor','r','MarkerFaceColor','g','MarkerSize',12)

clc;
clear all;
close all;
x = 0:0.1:10;
y1 = 2*sin(x)+0.1;
y2 = x.*y1;
y3 = cos(x)./(x+0.1);
y = [y1;y2;y3];
marker_style = {'>';'<';'s';'o';'d';'v';'p';'^';'*';'+';'x';'h'};
line_style = {'-';'--';':';'-.'};
figure
plot(x,y1);
grid on
xlabel('x轴');
ylabel('y轴');
title('标题');

figure用于新建一个窗口,xlabel,ylabel,title函数分别用于给x轴添加标签,y轴添加标签,及图片标题;如果不需要在里面输入函数及控制粗体斜体什么的,直接输入字符串即可,grid on即可显示网格,若不想显示, 可以使用grid off,注意gridon函数需要在plot之后调用,因为grid需要根据坐标轴情况来显示网格, 如果在plot之前,grid还不知道坐标轴的分布。

改变图形窗口背景

虽然很方便的画出了图,但大家都不会觉得这幅图好看,灰色的背景,白色的底纹,无论如何也不能放到论文什么的里面,大大的灰色区域让图片和白色的纸张有就像有一层深深的隔阂。 matlab中,有个功能非常强大的函数set,它可以设置句柄的属性。 当前图像的句柄可以直接用gca获取,因此,要改变当前图形窗口的背景只需要如下例中set(gcf,'color','w');即可:

通过此函数可以控制非常多的属性,gcf是figure生成的窗口的句柄,有三个句柄获取函数是经常使用的:

 

  1. gcf返回当前Figure对象的句柄值
  2. gca返回当前axes对象的句柄值
  3. gco返回当前鼠标单击的句柄值,该对象可以是除root对象外的任意图形对象,并且Matlab会把当前图形对象的句柄值存放在Figure的CurrentObject属性中

 

在绘图里gcf和gca句柄经常用到。

另外,下面这个函数在出图时经常使用:

set(gcf,'unit','normalized','position',[0.2,0.3,0.4,0.2]);

此函数的功能是自动调整绘图窗口的大小,上面语句是控制绘图窗口(figure)左下角在屏幕上的显示位置是以(0.2,0.3)为原点(屏幕尺寸的原点也为左下角),窗口长0.4,宽0.2。 通过这个函数,能方便统一的生成一个统一尺寸的图,且不用每次都手动调整。

当一个图上有多条曲线时,连续调用两次plot会发现只能显示最后一次调用的结果,若希望多条曲线能都绘制在一个图上,只需要hold on命令即可

figure
set(gcf,'color','w');
plot(x,y1);
hold on
plot(x,y2);
grid on
xlabel('x轴');
ylabel('y轴');
title('标题');

改变线形及标记

figure
set(gcf,'color','w');
x_temp = 1:10;
hold on
for i=1:length(marker_style)
    y_temp = ones(1,10);
    y_temp = y_temp .* i;
    plot_style = strcat('-',marker_style{i,1});
    plot(x_temp,y_temp,plot_style);
    text(x_temp(end)+0.5,y_temp(end),plot_style);
end

上代码中strcat是合并字符串函数,和c语言的一模一样。

设置线形及标记有四个属性经常用到分别是:

  • LineWidth 设置线宽
  • MarkerEdgeColor 设置标记的边框颜色
  • MarkerFaceColor 设置标记的内部天策颜色
  • MarkerSize 设置标记的尺寸

上代码中把plot返回的句柄记录下来赋值给handle_plot,用于设置属性。上例使用了两种方法设置属性,一种是set函数, 另外一种是直接在plot的第四个参数开始进行指定名称的设置,在'MarkerFaceColor'之后还可以一直延续下去, 

figure
set(gcf,'color','w');
x_temp = 1:10;
hold on
for i=1:length(line_style)
    y_temp = ones(1,10);
    y_temp = y_temp .* i;
    handel_plot = plot(x_temp,y_temp,line_style{i,1},'LineWidth',2);
    text(x_temp(end)+0.5,y_temp(end),line_style{i,1});
end
ylim([0 5]);

坐标轴(axis)控制

有时候,坐标轴并不是我们需要的范围里显示,那么就需要对坐标轴进行设置。

axis([xmin xmax ymin ymax zmin zmax])

若没有z轴,可以不用写z轴范围

axis函数可以设置坐标轴显示范围,其调用格式为:

  • axis equal:纵、横坐标轴采用等长刻度。
  • axis square:产生正方形坐标系(缺省为矩形)。
  • axis auto:使用缺省设置。
  • axis off:取消坐标轴。
  • axis on:显示坐标轴。

若想单独设置x轴或y轴范围,可以使用xlim,ylim函数

xlim([xmin xmax])

ylim([ymin ymax])

figure
set(gcf,'color','w');
plot(x,y1);
xlim([2 8]);
ylim([0 3]);
xlabel('x轴');
ylabel('y轴');
title('标题');

改变坐标轴显示数值,可以通过改变xtick,ytick属性来实现:

set(gca,'xtick',x_tick);
set(gca,'ytick',y_tick);

x_tick用于定义需要显示的范围向量,如想x轴从1到10,每隔0.5显示一个,那么x_tick就写成[1:0.5:10],如果1之前还有数据或者10之后还有数据都将不会显示

改变坐标轴的文字显示可以通过改变XTickLabel,YTickLabel实现:

set(gca,'XTickLabel',x_label);
set(gca,'YTickLabel',y_label);

x_label,y_label是对应要显示的字符串cell。需要注意的是这个cell的长度需要和上面x_tick的长度对应起来,例如x_tick设置为

 

[0,1,2,3,4]

而x_label设置为

 

{'零','一','二'}

前面的0,1,2将会替换为'零','一','二',但到后面的“3,4”,没有替换内容时,matlab会自动又从cell的第一个开始,既“3,4”将被替换为'零','一'。 看看下面这个例子:

figure
set(gcf,'color','w');
plot(x,y1);
grid on
xlabel('x轴');
ylabel('y轴');
title('标题');
x_tick = [1:2:10];
set(gca,'xtick',x_tick);
set(gca,'ytick',[-2:1:3]);
for i=1:length(x_tick)
    x_label{i,1} = sprintf('%.3fπ',x_tick(i)/pi);
end
set(gca,'XTickLabel',x_label);
set(gca,'YTickLabel',{'负二','负一','零','一','二','三'});

由于XTickLabel属性的长度需要和xtick设置的对应,因此,通常XTickLabel在xtick之后设置。

这个函数经常用于显示x轴为时间格式的内容。

图例 legend

如果有许多线,为了对每个线所代表的含义加以描述,就需要添加图例进行说明,此时需要用到函数legend legend函数需要每个线条的句柄和对应的文字作为输入,因此plot返回的句柄一定要记录下来

figure
set(gcf,'color','w');
size_y = size(y);
hold on
x_temp = x(1:2:end);
y_temp = y(:,1:2:end);
for i=1:size_y(1)
   plot_style = strcat('-',marker_style{i,1});
   handle_plot(i) = plot(x_temp,y_temp(i,:),plot_style);
   set(handle_plot(i),'color',[rand rand rand]*0.85);%乘以0.85是为了随机颜色更深一点
   set(handle_plot(i),'lineWidth',2);
   text_legend{i} = sprintf('曲线%d',i);
end
legend(handle_plot,text_legend,0);
grid on
xlabel('x轴');
ylabel('y轴');
title('标题');

此例中,text_legend 和plot_handle用于保存句柄和文字,由于matlab中文字用向量连接会自动合并,因此,这里文字需要用cell来存储

legend默认是右上角,若需要控制位置,可以在legend的第三个参数设置。

legend(plot_handle,text_legend,0);
代表图例放置在右下,数值可以从0到4,还有-1,他们的含义是:

0:自动把图例置于最佳位置,即和图中的曲线重复最少,此时,没改变一次大小,图例都会重新选择一次最佳位置;
-1:置于坐标轴外面的右上角;
1:置于图形右上角,为默认值;
2:置于图形左上角;
3:置于图形左下角
4:置于图形右下角
 

双坐标轴图形绘制 - plotyy

有时需要绘制两个变量在一个图上,但这两个变量的范围又差距很大,如一个可能是几百数量级的, 另一个可能是几十数量级的,这时候,用传统的hold on绘制出来的图线,低数量级的图线很难看清, 因此,需要给两个参数不同的坐标范围,matlab里面plotyy函数就是实现此功能。

figure
y_temp = y2.*1000;
[AX H1 H2] = plotyy(x,y1,x,y_temp);
grid on;
xlabel('x');

例子中[AX H1 H2]的作用非常重要,如果需要改变图形属性,他们是必不可少的。 对于plotyy来说,比较麻烦的是其属性的设置,由于有两个坐标系,因此在绘制时需要把两个坐标系及图线的句柄保存, AX保存了两个坐标轴对应的句柄AX(1)是左坐标,AX(2)是右坐标,H1和H2保存了两个图线的句柄。

为了设置坐标轴的文字,需要获取坐标轴的标签句柄,再设置,如下例子中的set(get(AX(1),'Ylabel'),'string','y1');既是把ax1对应的文字改为y1。 设置坐标轴的颜色直接改变坐标轴句柄的XColor和YColor属性,设置线条属性和plot函数一样。 效果见下例子:
 

figure
[AX H1 H2] = plotyy(x,y1,x,y_temp);
grid on
xlabel('x');
set(gcf,'color','w');
set(AX(1),'Xaxislocation','top');%把第一个数据的x轴提升到顶部
set(get(AX(1),'Xlabel'),'string','x1');%设置x1对应坐标轴内容
set(get(AX(1),'Ylabel'),'string','y1');%设置y1对应坐标轴内容
set(get(AX(2),'Xlabel'),'string','x2');%设置x2对应坐标轴内容
set(get(AX(2),'Ylabel'),'string','y2');%设置y2对应坐标轴内容
set(AX(1),'XColor','r','YColor','r');%设置y1对应x,y轴颜色
set(AX(2),'XColor','b','YColor','b');%设置y2对应x,y轴颜色
set(H1,'color','r');%设置y1线颜色
set(H2,'color','b');%设置y2线颜色
set(H1,'LineWidth',2);%设置y1线线宽
set(H2,'LineWidth',2);%设置y2线线宽

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值