2014-02-09 6 views
4

У меня есть список точек (x, y, z) и вы хотите визуализировать их как кривую на плоскости с точек на (x, y) и любого цвета/интенсивности/толщины как z. Как это можно сделать в Matlab?Графики (x, y, z) триплеты над координатами (x, y) с цветом z

plot(x,y) получает правильную форму, но мне нужно, чтобы цвет зависел от z.

+0

вы хотите линию, чтобы изменить цвет, а также или только точки? – thewaywewalk

+0

Предпочтительно и то и другое, но у меня достаточно данных, чтобы я мог начертить только точки без соединительных линий. – Tim

+0

Для полноты я добавил несколько замечаний относительно зависимой интенсивности и толщины. – thewaywewalk

ответ

3

Предполагая, что вас не интересует цвет фактической линии, но маркеры. Используйте plot в сочетании с scatter.

Представьте следующий пример данных:

t = 0:pi/20:2*pi; 
x = sin(t); 
y = cos(t); 
z = t; 

plot3(x,y,z); 

enter image description here

Подготовленный в 2D-плоскости:

plot(x,y); hold on 
scatter(x,y,300,z); hold off 

приводит:

enter image description here

От вашего комментария: если у вас достаточно данных, и вам не нужна линия, просто используйте scatter, это именно то, что вам нужно.


Другая возможность вдохновленный solution on MATLAB Central, учитывая как линии и маркеры.

surface([x;x],[y;y],zeros(2,length(t)),[z;z],'EdgeColor','flat',... 
     'Marker','o','MarkerSize',10,'MarkerFaceColor','flat'); 

enter image description here


сделать цвет в зависимости от z довольно легко, для изменения размеров маркеров вы определенно нуждаетесь в scatter функции:

surface([x;x],[y;y],zeros(2,length(t)),[z;z],'EdgeColor','flat'); hold on 
MarkerSize = round(z*1000)+1; 
scatter(x,y,MarkerSize,z,'.','MarkerFaceColor','auto'); hold off 

enter image description here

Ибо на z в зависимости, увеличивая прозрачность, это немного сложно. Вы можете найти обходной путь here, используя функцию patch.

1

Решение может быть как то

x = 0:.05:2*pi; 
y = cos(x); 
planez = zeros(size(x)); 
z = x; % This is the color, vary with x in this case, but you can use your vector 
surface([x;x],[y;y],[planez;planez],[z;z],... 
     'facecol','no',... 
     'edgecol','interp',... 
     'linew',2); 

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

enter image description here

Смежные вопросы