2016-10-16 3 views
0

Функция plot позволяет строить все маркеры с постоянным размером s.Эффективно маркеры разного размера

figure; 
x = -10 : 10; 
y = x .^ 2; 
s = 10; 
plot(x, y, 'bo', 'MarkerSize', s); 

Предположим, вместо этого мы хотели бы каждый маркер, чтобы иметь какой-то индивидуальный размер sx. Например, sx = abs(x) + 1.

Одним из способов достижения этого является использование цикла for.

figure; 
x = -10 : 10; 
y = x .^ 2; 
sx = abs(x) + 1; 

hold on; 
for i = 1 : length(x) 
    plot(x(i), y(i), 'bo', 'MarkerSize', sx(i)); 
end 

Это работает достаточно хорошо для небольшого числа x. Однако, что, если x больше? Например, x = -100 : 0.01 : 100.

Это займет значительно больше времени, в то время как plot(x, y, 'bo', 'MarkerSize', 100) все равно будет завершено почти мгновенно. В идеале мы могли бы сделать что-то вроде plot(x, y, 'bo', 'MarkerSize', sx), где sx - это вектор размеров с каждой записью в sx, соответствующей записи в x и y. К сожалению, это даст ошибку Value not a numeric scalar.

Есть ли эффективный способ построения маркеров, где каждый маркер имеет разные индивидуальные размеры?

ответ

2

То, что вы пытаетесь сделать, это возможно с помощью scatter вместо plot следующим образом:

scatter(x,y,abs(x)+1) 
Смежные вопросы