Во-первых, простой код:
x = 1:20;
nx = numel(x);
y = ones(1, nx);
% Color map
cm = [linspace(0, 1, nx).' zeros(nx, 1) linspace(1, 0, nx).'];
% Possible markers
m = 'o+*.xsd^vph<>';
nm = numel(m);
figure(1);
hold on;
for k = 1:nx
plot(x(k), y(k), ...
'MarkerSize', 12, ...
'Marker', m(ceil(nm * (rand()))), ...
'MarkerFaceColor', cm(k, :), ...
'MarkerEdgeColor', cm(k, :) ...
);
end
hold off;
А, на выходе:
Большую часть этого можно найти в справке MATLAB для команды plot
, в разделе Укажите ширину линии, размер маркера и цвет маркера . Цветовые карты - это просто n x 3
матрицы со значениями RGB в диапазоне от 0 до 1. Итак, я интерпретировал самый темный синий как [0 0 1]
, тогда как простой красный - [1 0 0]
. Теперь вам просто нужна линейная «интерполяция» между этими двумя значениями n
. Перемешивание типа маркера выполняется простым rand
. (Конечно, можно заранее создать вектор rand
с размером n
.) Я не совсем уверен, можно ли все это поместить в одну команду plot
, но я настроен весьма скептически. Таким образом, использование цикла было самым простым способом прямо сейчас.