如何提取plot绘制出的曲线上的各点坐标并存入数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何提取plot绘制出的曲线上的各点坐标并存入数组相关的知识,希望对你有一定的参考价值。

没有直接的函数。你可以自己编程实现。(以下是在命令窗口中运行的)
例如:散点,运行x=[...];y=[...];
1.绘散点图,观察散点的边界,运行plot(x,y,\'*‘);grid on;grid minor
2.用鼠标选边界点,并把选的点赋值给a,运行a=ginplut
3.数组a就是边界。可以用去整函数b=fix(a)得整点。
4.光滑曲线,可以把数组a在用样条函数差值一下就行了。
参考技术A plot函数的基本调用格式为:
1、plot(y)
当y为向量时,是以y的分量为纵坐标,以元素序号为横坐标,用直线依次连接数据点,绘制曲线。若y为实矩阵,则按列绘制每列对应的曲线。
2、plot(x,y)
若y和x为同维向量,则以x为横坐标,y为纵坐标绘制连线图。若x是向量,y是行数或列数与x长度相等的矩阵,则绘制多条不同色彩的连线图,x被作为这些曲线的共同横坐标。若x和y为同型矩阵,则以x,y对应元素分别绘制曲线,曲线条数等于矩阵列数。
3、plot(x1,y1,x2,y2,……)
在此格式中,每对x,y必须符合plot(x,y)中的要求,不同对之间没有影响,命令将对每一对x,y绘制曲线。
以上三种格式中的x,y都可以是表达式。plot是绘制一维曲线的基本函数,但在使用此函数之前,须先定义曲线上每一点的x以及y坐标。

Matlab可视化小结

技术图片

 

 

1. plot指令的基本调用格式

(1)plot(x)

x为向量时,以该元素的下标为横坐标、元素值为纵坐标绘出曲线

x为实数二维数组时,则按列绘制每列元素值相对其下标的曲线,曲线数等于x数组的列数。

x为复数二维数组时,则按列分别以数组的实部和虚部为横、纵坐标绘制多条曲线

(2)plot(x, y)

x、y为同维数组时,绘制以x、y元素为横纵坐标的曲线

x为向量,y为二维数组、且其列数或行数等于x的元素数时,绘制多条不同颜色的曲线

x为二维数组,y为向量时,情况与上相同,只是y仍为纵坐标。

3)plot(x1, y1, x2, y2, …)

绘制以x1为横坐标、y1为纵坐标的曲线1,以x2为横坐标、y2为纵坐标的曲线2,等等。

其中x为横坐标,y为纵坐标,绘制y=f(x)函数曲线。

例子:

clc,clear,close;

x = 0:pi/100:2*pi;

y = 2*exp(-0.5*x).*sin(2*pi*x);

plot(y)

subplot(1,3,1); plot(y); title(‘plot(x)‘);

subplot(1,3,2); plot(x,y); title(‘plot(x,y)‘);

subplot(1,3,3); plot(x,y,[0:7],(2*[0:7] + 1)/100); title(‘plot(x1,y1,x2,y2)‘);

 技术图片

 

 

 

2. hold on hold off 在同一张图中多次绘制

例子

t = 0:pi/100:pi;

y1 = sin(t)‘ * [1, 0];

y2 = sin(t).*sin(3*t).*sin(-3*t).*sin(-t);

plot(t,y1,‘r-‘);

hold on

plot(t,y2,‘b‘);

hold off

 技术图片

 

 

 

 

3. axis函数控制坐标轴

axis[a b c d] : 控制范围 a<=x<=b, c<=y<=d

例子

x = linspace(-15,15,200);

y = sin(4*x)./exp(.1*x);

plot(x,y,‘-r‘)

axis([-12 12 0 1.5])

 技术图片

4. stem画散点图

x = [0:pi/20:2*pi]‘;

y = [cos(x).*sin(x), sin(x)];

stem(x,y)

 技术图片

5. stairs画阶梯图

x = [0:pi/20:2*pi]‘;

y = [cos(x).*sin(x), sin(x)];

hold on

stem(x,y);

stairs(x,y,‘g‘);

hold off

技术图片

 

 

 

6. plotyy指令画双纵坐标

x = 0:pi/100:2*pi;

y = 2*exp(-0.5*x).*sin(2*pi*x);

plotyy(x,y,[0:7],2*[0:7] + 1)

技术图片

 

 

 

7. 制图辅助操作

 技术图片

 

 

 技术图片

 

 

 技术图片

 

 

 

t=(0:15)*2*pi/15;

y=sin(t);

subplot(3,2,1), plot(t, y); title(‘plot(t, y)‘)

subplot(3,2,2), plot(t, y, ‘o‘); title(‘plot(t, y, o)‘)

subplot(3,2,3), plot(t, y, ‘k:‘); title(‘plot(t, y, k:)‘)

subplot(3,2,4), plot(t, y, ‘k-.*‘); title(‘plot(t, y, k-.*)‘)

subplot(3,2,5), plot(t, y, ‘m--d‘); title(‘plot(t, y, m--d)‘)

subplot(3,2,6), plot(t, y, ‘r-x‘); title(‘plot(t, y, r-x)‘)

 技术图片

8. 刻度、分格线和坐标框

grid on         画出分格线

grid off         不画分格线

box on          控制加边框线

box off                 控制不加边框线

刻度设置

set(gca, ‘xtick’, xs, ‘ytick’, ys)

xs、ys可以使任何合法的实数向量,用于分别设置x、y轴的刻度。

例题:

t = 6*pi*(0:100)/100;

y=1-exp(-0.3*t).*cos(0.7*t);                         

plot(t,y,‘r-‘);

grid on;

box on;

set(gca,‘xtick‘,[pi,2.5*pi,4*pi],‘ytick‘,[0.85,1,1.05,1.245]);

 技术图片

 

 

 

 

 

9. 图形标识

图名(title)

坐标轴名(xlabel、ylabel)

图形文本注释(text)

图例(legend)

例(SIR,ode):

A = 0.4;

B = 0.1;

I = 0.4;

S = 0.5;

tspan = [0 50];

y0 = [I S];

[t, y] = ode45(@(t,y)odefun(t,y,A,B), tspan, y0);

r = 1-y(:,1)-y(:,2);

plot(t,y(:,1),‘-o‘,t,y(:,2),‘-.‘,t,r,‘g‘);

hold on;

legend(‘生病人数:i(t)‘,‘健康人数:s(t)‘,‘移除人数:r(t)‘,‘Location‘,‘Best‘);

ylabel(‘占人口比例%‘);

xlabel(‘时间t‘);

str = [‘接触数λ/μ:‘,num2str(A/B),‘ 初始生病人数:‘,num2str(I),‘,初始健康人数:‘,num2str(S)];

text(15,0.4,str,‘FontSize‘,10);

title(‘SIR模型(ode)‘);

 

function dydt = odefun(t,y,A,B)

dydt = zeros(2,1);

dydt(1) = A*y(1)*y(2) - B*y(1);

dydt(2) = -A*y(1)*y(2);

end

 技术图片

10. 直方图 bar

垂直直方图

x = -3:0.2:3;

bar(x,x.^2,‘r‘)

 技术图片

 

 

 

累计式

x=[1 2 3];

y=[1 3 2; 3 1 2; 2 1 3];

bar(x, y, ‘stack‘);

legend(‘part1‘, ‘part2‘, ‘part3‘);

 技术图片

 

 

 分组式

x=[1 2 3];

y=[1 3 2; 3 1 2; 2 1 3];

bar(x, y, ‘group‘);

legend(‘part1‘, ‘part2‘, ‘part3‘);

 技术图片

水平直方图 barh

累计式

分组式

x=[1 2 3];

y=[1 3 2; 3 1 2; 2 1 3];

barh(x, y, ‘group‘);

legend(‘part1‘, ‘part2‘, ‘part3‘);

 技术图片

 

 

 

11. 饼图pie

x=[1,2,3,4,5];

subplot(1,2,1);

pie(x,[1 0 0 0 0]);

legend({‘part1‘,‘part2‘,‘part3‘,‘part4‘,‘part5‘},‘Location‘,‘Best‘);

subplot(1,2,2);

y=int8(x==max(x))

pie3(x,y)

colormap(cool

 技术图片

 

 

12. 离散杆图stem

x = 0:0.1:2;

y = sin(x);

stem(x,y,‘r‘);

技术图片

 

 

13.极坐标polar

theta = 0:0.01:2*pi;

rho = sin(2*theta).*cos(2*theta);

polar(theta,rho,‘-.r‘);

技术图片

 

 

 

三维绘图

1. plot3 plot类似 :x,y,z 指定为相同长度的向量

t=(0:0.02:2)*pi;

x=sin(t);

y=cos(t);

z=cos(2*t);

plot3(x,y,z,‘-‘,x,y,z,‘rh‘);

grid on;

 技术图片

2. 三维网线图(mesh

需要先用meshgrid产生“格点”矩阵

3. 曲面图(surf

需要先用meshgrid产生“格点”矩阵

x=-5:0.1:5;

y=-5:0.1:5;

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

z=sin(x).*cos(y);                     

subplot(1,2,1), mesh(x,y,z);title(‘mesh‘);

subplot(1,2,2), surf(x,y,z);title(‘surf‘);   

colormap(cool);

 技术图片

 

 

 

技术图片

 

以上是关于如何提取plot绘制出的曲线上的各点坐标并存入数组的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB:提取两个figure图中的数据

matlab绘图

如何用matlab输出图形中各点的坐标

怎样在matlab中得到直线方程与plot出的曲线之间的交点坐标

matlab中plot(2,2)是啥意思

excel中plot函数如何使用