/ / неоднорідні згруповані дані в MATLAB plotyy () - matlab, matlab-figure

неоднорідні згруповані дані в MATLAB plotyy () - 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. Вищевказаний код працює, якщо я заміню "розкидання" на "сюжет" (див. Коментований рядок), але "розкидання" працює лише для 1 набору даних, а не для 3. Чому?

  2. Як окремо призначити кольори для 3-х згрупованих сюжетних ділянок чи сюжетів?

Відповіді:

1 для відповіді № 1

Прочитайте повідомлення про помилку, яке ви отримали:

Помилка використання розсіювання (рядок 44) X і Y повинні бути векторами однаковими довжина.

Якщо ви подивитеся на документацію на scatter ви побачите, що входи повинні бути векторами, і ви намагаєтеся передати масиви.

Одним із варіантів є складання векторів:

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

Зразок

Але я не знаю, якщо це те, що ви шукаєте, це, звичайно, не буде схоже на коментований рядок. Вам доведеться уточнити, як ви хочете виглядати остаточний сюжет.

Щодо другого питання, я б чесно рекомендував не використовувати 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);

Дає вам:

зразок2

Тепер ви маєте повний контроль над усіма властивостями осей та ліній. Зауважте, що це передбачає, що у вас є R2014b або новіша версія, щоб використовувати позначення крапок для доступу до Position властивість h.ax1. Якщо ви використовуєте старішу версію, яку ви можете використовувати get(h.ax1, "Position") замість цього.