Как передать массив линейных спецификаций или стилей на график?

Я хочу построить несколько линий одним вызовом plot(), с разными стилями линий для каждой линии. Вот пример:

И то и другое

plot([1,2,3]', [4,5;6,7;8,9], {'-o', '-x'})

а также

hs = plot([1,2,3]', [4,5;6,7;8,9])
set(hs, 'LineStyle', {'--'; '-'})

не работает Я перепробовал целую кучу тайных комбинаций с квадратными и фигурными скобками, но, похоже, ничего не помогло.

Я знаю, что можно перебрать столбцы в Y и вызвать plot() для каждого (как в этом вопросе), но это не то, что я ищу. Я действительно хотел бы избежать использования цикла здесь, если это возможно.

Благодарю.

PS: я нашел этот скрипт "prettyPlot", который говорит, что он может сделать что-то подобное, но я хочу знать, есть ли какой-нибудь встроенный способ сделать это.

PPS: для тех, кто хочет быстро решить эту проблему, попробуйте это:

for i = 1:length(hs)
   set(hs(i), 'Marker', markers{i}); 
   set(hs(i), 'LineStyle', linestyles{i}); 
end

например, с markers = {'+','o','*','.','x','s','d','^','v','>','<','p','h'}

1 ответ

Ссылаясь на http://www.mathworks.com/help/matlab/ref/plot.html, вот как можно нарисовать несколько линий с помощью одной команды сюжета:

plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)

Итак, ваша идея

plot([1,2,3]', [4,5;6,7;8,9], {'-o', '-x'})

должно быть написано как:

plot([1,2,3]', [4,6,8], '-o', [1,2,3]',[5,7,9],'-x')

в результате чего:

Несколько строк с одной командой заговора

Реорганизуйте входные параметры в массивы ячеек и используйте cellfun, чтобы применить команду plot к каждому элементу ячейки.

x = [1,2,3]';
xdata = {x;x};
ydata = {[4,6,8];[5,7,9]};    
lspec = {'-o';'-x'};

hold all;
cellfun(@plot,xdata,ydata,lspec);
Другие вопросы по тегам