轴刻度非常小

时间:2014-05-28 10:33:07

标签: matlab

我有一个代码,我需要在其中绘制两个函数,其中x轴由非常小的数字组成(平均值为10 ^ -6)。 这是代码:

Na = 10^18;
Nd = 10^15;
X_n = 9.941913007683443e-05;
X_p = 9.931981026656786e-08;
eps_0 = 8.85*10^-14;
eps_r = 11.8;
q = 1.6*10^-19;

x1 = -X_p:0.000000001:0;
x2 = 0:0.00000001:X_n;

v1 = (q*Na/eps_0*eps_r).*(x1.^2/2+X_p.*x1)+(X_p^2*q*Na)/(2*eps_0*eps_r);
v2 = (-q*Nd/eps_0*eps_r).*(x2.^2/2-X_n.*x2)+(X_p^2*q*Na)/(2*eps_0*eps_r);
figure (2)
plot(x1,v1,'r');
figure (1)
plot(x2,v2);

% plot(x1,v1,'r');
% hold on;
% plot(x2,v2);

在这里,两个图表是分开的,因此您可以看到它们有多么不同。我想在一个图中绘制这两个函数。正如您所看到的,我尝试使用hold on命令,但由于每个功能的不同程度,它无法正常工作。我也尝试使用轴相等,轴自动等命令,它也没有用。

我该怎么办?

谢谢。

2 个答案:

答案 0 :(得分:0)

您是否考虑过使用subplot

如果您必须使用x1x2,我不相信您可以在同一图中同时显示两个图表。但你可以尝试:

subplot(2,1,1)
plot(x1,v1,'r');
title('title one')
xlabel('some values')
ylabel('some other values')
lg = legend('This curve represents...')
subplot(2,1,2)
plot(x2,v2,'b');
title('title two')
xlabel('some values')
ylabel('some other values')
lg2 = legend('This curve represents...')

修改

试试这个!我给你一个你可以修改的例子。

x1 = 0:0.1:40;
y1 = 4.*cos(x1)./(x1+2);
x2 = 1:0.2:20;
y2 = x2.^2./x2.^3;

你有两个x值和两个不同的y值,然后使用line

line(x1,y1,'Color','r') % The first plot!
haxes1 = gca; % handle to axes
set(haxes1,'XColor','r','YColor','r') % sets the first x,y_axis of different color, this time will be red, but you can change this if you want

然后:

haxes1_pos = get(haxes1,'Position'); % store position of first axes
haxes2 = axes('Position',haxes1_pos,...
          'XAxisLocation','top',...
          'YAxisLocation','right',...
          'Color','none');

完全按照您的意愿使用代码。如果需要,可以跳过'YAxisLocation','right',...,试试代码并告诉我它是如何运作的。

答案 1 :(得分:0)

尝试缩放其中一个或两个,直到它们之间的差异不那么显着。否则,较小的将永远(并且在视觉上)为零。