Как построить несколько линий с разными маркерами - PullRequest
9 голосов
/ 06 марта 2011

Я хотел бы построить несколько линий с помощью MATLAB и сделать так, чтобы маркеры были разными в каждой строке.Я знаю, что с цветами это будет достигнуто с ColorSet = hsv(12);.Есть ли такой простой способ для маркеров?

Ответы [ 6 ]

10 голосов
/ 06 марта 2011

Ну, я не знаю о встроенной функциональности MATLAB , чтобы сделать это, но я делаю следующее.Я создаю свою собственную ячейку:

markers = {'+','o','*','.','x','s','d','^','v','>','<','p','h'}

, а затем обращаюсь к ней следующим образом:

markers{mod(i,numel(markers))+1}

Я также создал функцию getMarker, которая делает это и которую я добавил впуть к MATLAB, чтобы я мог получить к нему доступ во всех моих сценариях.

4 голосов
/ 24 февраля 2013
x = linspace(0, 2*pi);
y = cos(bsxfun(@plus, x(1:15:end), x'));
figure
m = {'+','o','*','.','x','s','d','^','v','>','<','p','h'};
set(gca(), 'LineStyleOrder',m, 'ColorOrder',[0 0 0], 'NextPlot','replacechildren')
plot(x, y)
3 голосов
/ 04 августа 2013

Да, есть готовый метод: это свойство оси LineStyleOrder.Для его активации необходимо отключить свойство ColorOrder, которое имеет приоритет над первым и активируется по умолчанию.Вы можете сделать следующее:

m = {'+','o','*','.','x','s','d','^','v','>','<','p','h'};
set_marker_order = @() set(gca(), ...
    'LineStyleOrder',m, 'ColorOrder',[0 0 0], ...
    'NextPlot','replacechildren');

, где значения m были получены вручную из вывода help plot.Затем используйте его как в этом примере:

x = linspace(0, 2*pi);
y = cos(bsxfun(@plus, x(1:15:end), x'));
figure
set_marker_order()
plot(x, y)
2 голосов
/ 25 августа 2015

Я использую простую процедуру для случайного создания новых стилей для графиков. Хотя это на самом деле не итерация, но кто-то может найти ее полезной:

function [styleString] = GetRandomLineStyleForPlot()
% This function creates the random style for your plot
% Colors iterate over all colors except for white one
  markers = {'+','o','*','.','x','s','d','^','v','>','<','p','h'};
  lineStyles = {'-', '--', ':', '-.'};
  colors = {'y', 'm', 'c', 'r', 'g', 'b', 'k'};
  styleString = strcat(markers(randi(length(markers), 1) ), ...
                lineStyles(randi(length(lineStyles), 1) ), ...
                colors(randi(length(colors), 1) ) );

end
2 голосов
/ 17 декабря 2013

Следующее также помогает.

функция testfig

x=0:0.1:10;
y1=sin(x);
y2=cos(x);
m = ['h','o','*','.','x','s','d','^','v','>','<','p','h'];

plot(x,y1,[m(1)])
hold on;
plot(x,y2,[m(2)])
1 голос
/ 06 марта 2011

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

Например, этот код будет генерировать несколько строк с различными типами маркеров:

x = -pi:.1:pi;
y = sin(x);
z = cos(x);
t = tan(x);
l = x.^2;
figure();
hold on;
plot (x,y,'--g');
plot (x,z,'-.y');
plot (x,t,'-b');
plot (x,l,':r');
hold off;

сгенерированный граф: The yellow line is hard to spot, but it's there

для получения дополнительной помощи перейдите по ссылке: http://www.mathworks.com/help/techdoc/ref/linespec.html

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