Как передать массив линейных спецификаций или стилей на график?
Я хочу построить несколько линий одним вызовом 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);