MATLAB中的非同质分组数据plotyy()

时间:2015-06-04 22:32:40

标签: matlab matlab-figure

我必须在一个绘图窗口中绘制1个线图和3个分组散点图。

以下是我尝试过的代码,

figure;
t1=0:0.1:10;
X = 2*sin(t1);
ts = 0:1:10;
Y1 = randi([0 1],length(ts),1);
Y2 = randi([0 1],length(ts),1);
Y3 = randi([0 1],length(ts),1);
plotyy(t1,X,[ts',ts',ts'],[Y1,Y2,Y3],'plot','scatter');
%plotyy(t1,X,[ts',ts',ts'],[Y1,Y2,Y3],'plot','plot');

以下是我的问题,

  1. 如果我更换' scatter'上面的代码有效。通过' plot' (见注释掉的行),但是'分散'仅适用于1个数据集,而不适用于3.为什么?

  2. 如何为3个分组的散点图或绘图单独指定颜色?

1 个答案:

答案 0 :(得分:1)

阅读您给出的错误消息:

  

使用散射时出错(第44行)X和Y必须是相同的向量   长度。

如果查看scatter的文档,您会看到输入必须是向量,并且您正在尝试传递数组。

一种选择是堆叠矢量:

plotyy(t1,X,[ts';ts';ts'],[Y1;Y2;Y3],'plot','scatter');

Sample

但我不知道这是不是你想要的,它肯定不像评论的那一行。你必须澄清你想要的最终情节。

关于第二个问题,我诚实地建议不要使用plotyy。我可能有偏见,但我发现它很挑剔我的口味。我喜欢使用的方法是堆叠多个轴并绘制每个轴。这使我可以完全控制所有图形对象和图。

例如:

t1=0:0.1:10;
X = 2*sin(t1);
ts = 0:1:10;
Y1 = randi([0 1],length(ts),1);
Y2 = randi([0 1],length(ts),1);
Y3 = randi([0 1],length(ts),1);

% Create axes & store handles
h.myfig = figure;
h.ax1 = axes('Parent', h.myfig, 'Box', 'off');
h.ax2 = axes('Parent', h.myfig, 'Position', h.ax1.Position, 'Color', 'none', 'YAxisLocation', 'Right');

% Preserve axes formatting
hold(h.ax1, 'on');
hold(h.ax2, 'on');

% Plot data
h.plot(1) = plot(h.ax1, t1, X);
h.scatter(1) = scatter(h.ax2, ts', Y1);
h.scatter(2) = scatter(h.ax2, ts', Y2);
h.scatter(3) = scatter(h.ax2, ts', Y3);

给你:

sample2

现在您可以完全控制所有轴和线属性。请注意,这假设您使用R2014b或更新版本,以便使用点表示法来访问Position h.ax1属性。如果您运行的是旧版本,则可以使用get(h.ax1, 'Position')代替。