使用保持开/关语句在MATLAB中的一个图中绘制多个图

时间:2018-01-29 03:21:59

标签: matlab plot

如何解决这个问题,以便在一个图中显示所有三个图?

我遵循了这个SO答案中的说明,但没有成功:https://stackoverflow.com/a/8773571/2414957

figure;
t = -pi:0.01:pi;

a = sin(t);
plot(t, a, 'r', 'DisplayName', 'a'); hold on;
fhat = (21./(8*pi.^10))*(33*pi.^4-3465*pi.^2+31185)*t.^2 +(3750*pi.^4 -30*pi.^6 -34650*pi.^2)*t.^3 +(5*pi^8-765*pi.^6+7425*pi.^4)*t;
plot(t, fhat, 'c', 'DisplayName', 'fhat');
hold on; 
p = t - (t.^3)/factorial(3) + (t.^5)/factorial(5);
plot(t, p, 'b', 'DisplayName', 'p');
hold on;
title('Sine plot by sin(t)');
xlabel('t');
ylabel('sin(t)');
legend('show');

enter image description here

2 个答案:

答案 0 :(得分:3)

3个图具有变体范围,因此,您需要进行标准化以在同一空间绘制所有函数

figure;
t = -pi:0.01:pi;
a = sin(t);p = t - (t.^3)/factorial(3) + (t.^5)/factorial(5);
fhat = (21./(8*pi.^10))*(33*pi.^4-3465*pi.^2+31185)*t.^2 +(3750*pi.^4 -30*pi.^6 -34650*pi.^2)*t.^3 +(5*pi^8-765*pi.^6+7425*pi.^4)*t;
%display
plot(t, p/norm(p), 'b', 'DisplayName', 'p');
hold on; %you need only one 'hold on'
plot(t, a/norm(a), 'r', 'DisplayName', 'a');
plot(t, fhat/norm(fhat), 'c', 'DisplayName', 'fhat');
title('Sine plot by sin(t)');
xlabel('t');
ylabel('sin(t)');
legend('show');

enter image description here

答案 1 :(得分:1)

您正在绘制所有三个功能。会发生什么是pa所取代。与that相比,它们都非常小,因此会落在屏幕上的相同像素上。

要验证这一点,您可以放大:

set(gca,'ylim',[-1.5,1.5])

或者,使用点或短划线绘制p,所以另一条线显示在其间:

figure;
t = -pi:0.01:pi;
a = sin(t);
plot(t, a, 'r', 'DisplayName', 'a'); hold on;
fhat = (21./(8*pi.^10))*(33*pi.^4-3465*pi.^2+31185)*t.^2 +(3750*pi.^4 -30*pi.^6 -34650*pi.^2)*t.^3 +(5*pi^8-765*pi.^6+7425*pi.^4)*t;
plot(t, fhat, 'c', 'DisplayName', 'fhat');
hold on; 
p = t - (t.^3)/factorial(3) + (t.^5)/factorial(5);
plot(t, p, 'b--', 'DisplayName', 'p'); % Note the 'b--' line format here!
hold on;
title('Sine plot by sin(t)');
xlabel('t');
ylabel('sin(t)');
legend('show');