6

我有三个数据集以及它们的错误向量。我想将它们绘制在同一个图上,其中数据集在同一个 y 轴上(在左侧),错误在同一个图上,但在不同的轴上(在右侧)。

函数plotyy允许为每个轴上的 1 个图执行此操作,我如何为多个图执行此操作?

4

5 回答 5

5

也可以plotyy()与多行 y 值一起使用。

遵循 matlab 帮助中的示例:

x = 0:0.01:20;
y1 = [200*exp(-0.05*x).*sin(x);
      300*exp(-0.04*x).*sin(x)];
y2 = [0.8*exp(-0.5*x).*sin(10*x);
      0.6*exp(-0.4*x).*sin(5*x)];
[AX,H1,H2] = plotyy(x,y1,x,y2);

set(get(AX(1),'Ylabel'),'String','Slow Decay') 
set(get(AX(2),'Ylabel'),'String','Fast Decay') 

xlabel('Time (\musec)') 
title('Multiple Decay Rates')

set(H1,'LineStyle','--')
set(H2,'LineStyle',':')

产生下图

使用带有多个 y 值的 plotyy。

于 2012-12-11T15:01:09.090 回答
4

我认为您应该axes手动创建新的:

figure(1); clf, hold on

x1 = 0:0.1:5*pi;
y1 = sin(x1)./x1;

x2 = 0:0.1:5*pi;
y2 = x2.^(0.2);

x3 = 0:0.1:5*pi;
y3 = cos(x3);

plot(x1,y1, 'b', 'linewidth', 2)
plot(x2,y2, 'g', 'linewidth', 2)
plot(x3,y3, 'k', 'linewidth', 2)


ax1 = gca;
ax2 = axes('Position', get(ax1,'Position'),...           
           'YAxisLocation','right',...
           'Color' , 'none',...
           'YColor', 'r');
linkaxes([ax1 ax2], 'x')

x4 = x3;
y4 = 0.025*randn(size(y3));

line(x4, y4, 'color', 'r', 'parent', ax2)

输出: 在此处输入图像描述

于 2012-12-11T14:03:40.550 回答
2

这是@natan建议的使用滑铁卢的代码

x = 0:0.01:20;
y1 = [200*exp(-0.05*x).*sin(x);300*exp(-0.04*x).*sin(x)];
y2 = [0.8*exp(-0.5*x).*sin(10*x);0.6*exp(-0.4*x).*sin(5*x)];
f=GXFigure();
ax=subplot(f,1,1,1);
p1=line(ax, x, y1(1,:), 'LineColor', 'SEAGREEN');
p2=line(p1, [], y1(2,:), 'LineColor', 'TOMATO');
ax.getObject().getView().setXLabel(sprintf('Time Slow Decay %cs', char(181)));
layer1=kcl.waterloo.graphics.GJGraph.createInstance();
ax.getObject().getView().add(layer1);
p3=line(wwrap(layer1), x, y2(1,:), 'LineColor', 'CORNFLOWERBLUE');
p4=line(p3, x, y2(2,:), 'LineColor', 'CRIMSON');
layer1.setXLabel(sprintf('Time Fast Decay %cs', char(181)));
ax.getObject().setTitleText('Multiple Decay Rates');

产生:

在此处输入图像描述

有关其他示例,请参见 此处

于 2012-12-12T20:01:05.840 回答
1

您可以尝试以下方法:

% Example data
x = [1 2 3];
yd1 = [1 1 1];
yd2 = [2 2 2];
yd3 = [3 3 3];
ye1 = [0.1 0.2 0.3];
ye2 = [0.2 0.3 0.4];
ye3 = [0.3 0.4 0.5];
% Create two axes
ax1 = axes();
ax2 = axes();
% Plot your data
line(x, yd1, 'Parent', ax1, 'Color', 'b');
line(x, yd2, 'Parent', ax1, 'Color', 'b');
line(x, yd3, 'Parent', ax1, 'Color', 'b');
line(x, ye1, 'Parent', ax2, 'Color', 'r');
line(x, ye2, 'Parent', ax2, 'Color', 'r');
line(x, ye3, 'Parent', ax2, 'Color', 'r');
% Modify axes properties
set(ax1, 'ylim', [-10 4]);
set(ax2, 'Color', 'none', 'YAxisLocation', 'right', 'XTick', []);

在此处输入图像描述

我使用了,line而不是plot,因为plot给了我一些关于 y 轴刻度的问题。更多信息在这里

于 2012-12-11T14:31:15.647 回答
0

这是绘制两个 y 轴的最简单方法,允许您使用与正常绘图中相同的标签和边界设置器:ylimylabel等。

文档

yyaxis left;
plot(x, y_left);
ylim([0, 100]); % sets the limits for the left y axis
ylabel('left axis');

yyaxis right;
plot(x, y_right);
ylim([0, 100]); % sets the limits for the right y axis
ylabel('right axis');
于 2018-02-20T22:40:13.867 回答