Построение функций на одном рисунке с параметрами, заданными вектором (цветная проблема) - PullRequest
0 голосов
/ 09 января 2019

Я хочу построить четыре прямые линии с разными наклонами, заданными вектором $ A $:

A=[1.1,2.3,7.9];
k=0;
x=-1:0.01:1;
for n=1:3
    plot(x,A(n)*x)
    hold on
end

Однако оказывается, что все линии имеют одинаковый цвет (синий). Как мне нарисовать их разными цветами, но все же используя команду for-end? (это необходимо, когда вектор $ A $ огромен ...)

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Вы можете создать цветовую карту (например, lines), чтобы указать цвета для всех различных линий. Используя set на дескрипторе строк, вам не нужно использовать цикл for.

A=[1.1,2.3,7.9];
x=-1:0.01:1;

cmap = lines(numel(A));
p = plot(x,A.'*x);

set(p, {'color'}, num2cell(cmap,2));

В качестве альтернативы, если вы хотите использовать цикл for, вы можете установить цвет с помощью одной и той же карты цветов на каждой итерации цикла:

figure()
axes;
hold on;

cmap = lines(numel(A));

for n = 1:numel(A)
    plot(x,A(n)*x, 'Color', cmap(n,:));
end
0 голосов
/ 10 января 2019

Используйте следующее

A=[1.1 2.3 7.9];
x=[-1 1]; % use this instead of x=-1:0.01:1
line(x,A'*x);

результат:

enter image description here

Также, если вы хотите манипулировать цветами вручную, используйте следующий код:

A=[1.1 2.3 7.9];
L=length(A);
col_mat=rand(L,3); % define an arbitrary color matrix in RGB format
x=[-1 1]; % use this instead of x=-1:0.01:1
p=line(x,A'*x);
%% apply the colors
for i=1:L
    p(i).Color=col_mat(i,:);
end
0 голосов
/ 09 января 2019

На самом деле это можно решить, поставив «hold all» перед циклом for-end:

A=[1.1,2.3,7.9];
k=0;
x=-1:0.01:1;
hold all
for n=1:3
    plot(x,A(n)*x)
end

Я использую 2013a. Не уверен, что другие версии Matlab имеют такую ​​же проблему и решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...