%% 1.画多根线条
plot(A)%若A为二维矩阵,按列画线条,条数为列数
plot(x,[y1;y2;y3;……])%横坐标相同的多根折线
plot(x1,y1,x2,y2,……)%横坐标不同的多根折线
plotyy(x1,y1,x2,y2)%有两个纵坐标度
%% 2.设置线条颜色、线条类型、标记符号形状
plot(x,y1,'g',x,y2,'b--o',x,y3,'c*')%y后面的单引号内容设置线条颜色、线条类型、标记符号形状等,无先后顺序
%% 3.标记特殊点
plot(x,y,'-o','MarkerIndices',1:5:length(y))%每隔四个数据点标记一个数据。若只想标记部分特殊的数据点,先找到特殊数据点的位 置,然后替换掉1:5:length(y)
%% 4.美观地标记特殊数据点
x = -pi:pi/10:pi;
y = tan(sin(x)) - sin(tan(x));
plot(x,y,'--gs',...
'LineWidth',2,...
'MarkerSize',10,...
'MarkerEdgeColor','b',...
'MarkerFaceColor',[0.5,0.5,0.5])%指定线宽(LineWidth)、标记大小(MarkerSize)、标记轮廓颜色(MarkerEdgeColor)、标记 填充颜色(MarkerFaceColor)。可以和3一起使用,更美观地标记特殊数据点,如用红星标记最值:
x = 1:100;
y = rand(100,1);
idxmin = find(y == max(y));
idxmax = find(y == min(y));
plot(x,y,'-h','MarkerIndices',[idxmin idxmax],...
'MarkerFaceColor','red',...
'MarkerSize',15)
%% 5.添加轴标签
xlabel('x')
ylabel('y')%添加轴标签
%% 6.subplot
%subplot(m,n,p) 其中,m表示是图形排成的行数,n表示图形排成的列数,p表示图形所在的位置,位置顺序按照从左到右、从上到下计数。
subplot(2,2,1);%左上
plot(x,y1);
subplot(2,2,2); %右上
plot(x,y2);
subplot(2,2,3); %左下
plot(x,y3);
subplot(2,2,4); %右下
plot(x,y4);
%% 7.将线条断开/nan
plot([1,2,NaN,4,5])%将线条断开。使用 NaN 和 Inf 值将行断开。例如此代码绘制前两个元素,跳过第三个元素,并使用最后两个元素绘制 另一线条
%% 8.绘制置信范围
%使用 fill 函数绘制置信范围,同时使用 plot 函数绘制数据点,以此方式创建含有置信范围的绘图
x = 0:0.2:10;
y = besselj(0, x);
xconf = [x x(end:-1:1)] ;%一个来回
yconf = [y+0.15 y(end:-1:1)-0.15];%0.15就是条带宽度,换成矩阵就会有不同的宽度
p = fill(xconf,yconf,'r','FaceColor',[1 0.8 0.8],'EdgeColor','none');%FaceColor为填充颜色,EdgeColor为边框颜色
hold on
plot(x,y,'ro')
hold off
%% 9.双纵坐标清晰可调版
plotyy()/yyaxis left/yyaxis right%双纵坐标
days = 0:5:35;%使用两个 y 轴合并线图和条形图
conc = [515 420 370 250 135 120 60 20];
temp = [29 23 27 25 20 23 23 17];
yyaxis left
b = bar(days,temp);
yyaxis right
p = plot(days,conc);
%三维螺旋图
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);
plot3(st,ct,t)
%stairs
X = linspace(0,1,30)';
Y = [cos(10*X), exp(X).*sin(10*X)];
h = stairs(X,Y);
h(1).Marker = 'o';
h(1).MarkerSize = 4;
h(2).Marker = 'o';
h(2).MarkerFaceColor = 'm';
%绘制长度相等的垂直误差条
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
err = 8*ones(size(y));
errorbar(x,y,err)%err这里表示垂直误差条的长度,不同可以输入一维数组
%绘制长度不等的垂直+水平误差条
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
yneg = [1 3 5 3 5 3 6 4 3 3];
ypos = [2 5 3 5 2 5 2 2 5 5];
xneg = [1 3 5 3 5 3 6 4 3 3];
xpos = [2 5 3 5 2 5 2 2 5 5];
errorbar(x,y,yneg,ypos,xneg,xpos,'o')
%yneg 和 ypos分别控制垂直误差条下部和上部的长度。xneg 和 xpos分别控制水平误差条左侧和右侧的长度。
%数据点标记属性都可以更改
x = linspace(0,10,15);
y = sin(x/2);
err = 0.3*ones(size(y));
errorbar(x,y,err,'-s','MarkerSize',10,...
'MarkerEdgeColor','red','MarkerFaceColor','red')
%area,可以更改线条形状和填充颜色
Y = [1, 5, 3;
3, 2, 7;
1, 5, 3;
2, 6, 1];
h = area(Y,'LineStyle',':');%Y为矩阵则按列画图
h(1).FaceColor = [0 0.25 0.25];
h(2).FaceColor = [0 0.5 0.5];
h(3).FaceColor = [0 0.75 0.75];
%histogram直方图是统计每个数值出现的次数,还可以归一化再统计......其实一般没啥用,条形图bar更有用
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';%归一化
h1.BinWidth = 0.25;
h2.Normalization = 'probability';%归一化
h2.BinWidth = 0.25;
%pie
X = 1:3;
explode = [1 0 0];%1表示弹出
labels = {'Taxes','Expenses','Profit'};%设置文本标签,没有这一行默认是所占百分比
p = pie(X,explode,labels)
t = p(2);%第一块的标签
t.BackgroundColor = 'c';
t.EdgeColor = 'red';
t.FontSize = 14;
%三维饼图是pie3,用法和pie一模一样
%scatter
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
sz = linspace(1,100,length(x));%改变圆圈尺寸,可以为常数
c = linspace(1,10,length(x));%改变圆圈颜色
scatter(x,y,sz,c)%只想改变圆圈颜色的话记得sz处写成[],想变成实心的就在最后面加上,'filled'
grid on;set(gca,'GridLineStyle',':','GridColor','b','GridAlpha',1);%添加网格虚线
%三维散点图用scatter3
b=zz; %相关性数值
r=a*pi/180;%将角度转为弧度
[x,y]=pol2cart(r,b);
hd=compass(x,y) plottools
%三维切片图需要四个指标,且X,Y,Z,V都是三维的,多了一个v其实就是由曲面变成了实心体,v表示三维体的内部情况
clc;clear;close all;
[X,Y,Z] = meshgrid(-2:.2:2);%由一维扩充成三维,这样生成的X,Y,Z都是三维的
V = X.*exp(-X.^2-Y.^2-Z.^2);%V也是三维的
xslice = [-1.2,0.8,2];%画平行于yoz的切平面
yslice = [];%画平行于xoz的切平面
zslice = 0;%画平行于xoy的切平面
slice(X,Y,Z,V,xslice,yslice,zslice)
%面
x=-2:.2:2;y=-2:.2:2;z=-2:.2:2;
[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4');%插值
surf(X,Y,Z)
%把面变成实心体,对实心体切面就是三维切片图
x=-2:.2:2;y=-2:.2:2;z=-2:.2:2;
[X,Y,Z] = meshgrid(-2:.2:2);%由一维扩充成三维,这样生成的X,Y,Z都是三维的
V = X.*exp(-X.^2-Y.^2-Z.^2);%V也是三维的
xslice = [-1.2,0.8,2];%画平行于yoz的切平面
yslice = [];%画平行于xoz的切平面
zslice = 0;%画平行于xoy的切平面
slice(X,Y,Z,V,xslice,yslice,zslice)
hold on
[X,Y,Z]=griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4');%插值
surf(X,Y,Z)
%四维图其实是动态三维图,第四维为时间,只能用动图或视频表示
[x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2);
v = x.*exp(-x.^2-y.^2-z.^2);
xslice = [-1.2,.8,2];
yslice = 2;
zslice = [-2,0];
[xsp,ysp,zsp] = sphere;
slice(x,y,z,v,[-2,2],2,-2)
for i = -3:.2:3
hsp = surface(xsp + i,ysp,zsp);
rotate(hsp,[1 0 0],90)
xd = get(hsp,'XData');
yd = get(hsp,'YData');
zd = get(hsp,'ZData');
delete(hsp)
hold on
hslicer = slice(x,y,z,v,xd,yd,zd);
axis tight
xlim([-3,3])
view(-10,35)
drawnow
delete(hslicer)
hold off
end
在画图代码的最后面加上
plottools
即可自动调出编辑界面,可视化同步
图形对象有所画的点、线、面、文本、坐标轴、窗口等,**句柄(**handle)是图形对象的唯一标识符,不同对象的句柄不同,句柄变量就相当于对象名。
命令 | 功能 |
---|---|
hd1=plot(x,y) | hd1为该曲线的句柄变量 |
hd2=scatter(x,y) | hd2为散点的句柄变量 |
hd3=gcf | hd3为当前图形窗口的句柄变量 |
hd4=gca | hd4为当前坐标轴的句柄变量 |
上述命令不加分号,会在命令行窗口输出各个对象的属性,知道属性就可以通过更改属性值来获得满意的图像啦
我们可以通过set函数重新设定对象属性,可以通过get函数获取属性值
set
set(图形句柄,属性名1,属性值1,属性名2,属性值2,……)
get
get(图形句柄,属性名)
一些具体的属性设置,诸如 position、title、xlabel / ylabel / zlabel、xlim / ylim / zlim 等的用法,在此就不再具体展开