2016-10-15 4 views
0

Я хочу построить несколько строк с одним вызовом до 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() для каждого из них (например, в this question), но это не то, что мне нужно. Мне бы очень хотелось избежать использования цикла здесь, если это возможно.

Спасибо.

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') 

результат:

Multiple lines with single plot command

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

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

hold all; 
cellfun(@plot,xdata,ydata,lspec); 
+0

Спасибо за ваш ответ. Пример, который я дал в моем вопросе, состоял только в том, чтобы показать форму, в которую входят мои данные, т. Е. Массив для X, матрицу для Y. Эти структуры обычно очень большие, поэтому вручную разбивая их на отдельные аргументы на 'plot()' для меня это не очень практично. Есть ли способ передать какой-то массив ячеек, который волшебным образом раскрывается в спецификации параметров выше? – Aralox

+0

Как насчет реорганизации Y1 и использования cellfun для итерации функции построения графика. Я добавил пример ответа. – Bambang

+0

Эй, это выглядит намного лучше! Есть ли способ перестановки/преобразования регулярной матрицы i по j в массив ячеек, который выглядит как 'ydata' выше? В принципе, для преобразования моего числового массива x и y-матрицы в формы, которые будут работать с 'cellfun()' – Aralox