在Matlab中为3D绘图数据点添加字母

时间:2012-01-09 17:42:02

标签: matlab graph plot

我目前正致力于手指移动的3D表示。你可以在下面的图片中看到它的样子,因为它太复杂了,不能描述:

hand representation http://img51.imageshack.us/img51/4747/handexample.png

这是一部动画,所以它在不停地移动。每个手指都有一个点,手掌有一个点。但是,我无法跟踪手指。我试着给它们不同的颜色,但它没有多大帮助。

所以问题是:

  • 有没有办法用实际字母,甚至短字(3-4个字母)替换圆圈或任何其他符号?

  • 或者(这是一个很长的时间,但为什么不问?),是否有办法画出将这些点连接在一起的线条?这是可选的,如果有必要,我可以打开另一个问题。

谢谢!

这是实际的代码;我知道它远不是优雅的编码,对此感到抱歉,但它确实有效,这对我来说已经是一个很好的步骤:

clear all
clc

csv=csvread('pilot6/maindroite.csv',1,0); %read the values from a csv
both = csv(:,2:19);

ax=axes;
set(ax,'NextPlot','replacechildren');

Dt=0.1; %sampling period in secs

k=1;
hp1=plot3(both(k,1),both(k,2),both(k,3),'ok'); %get handle to dot object
hold on;
hp2=plot3(both(k,4),both(k,5),both(k,6),'og');
hp3=plot3(both(k,7),both(k,8),both(k,9),'ob');
hp4=plot3(both(k,10),both(k,11),both(k,12),'oc');
hp5=plot3(both(k,13),both(k,14),both(k,15),'om');
hp6=plot3(both(k,16),both(k,17),both(k,18),'or');
hold off;

t1=timer('TimerFcn','k=doPlot(hp1,hp2,hp3,hp4,hp5,hp6,both,t1,k)','Period', Dt,'ExecutionMode','fixedRate');
start(t1);

和使用的函数:

function k=doPlot(hp1,hp2,hp3,hp4,hp5,hp6,pos,t1,k)

k=k+1;
if k<5000%length(pos)
   set(hp1,'XData',pos(k,1),'YData',pos(k,2),'ZData',pos(k,3));
   axis([0 255 0 255 0 255]);
   set(hp2,'XData',pos(k,4),'YData',pos(k,5),'ZData',pos(k,6));
   set(hp3,'XData',pos(k,7),'YData',pos(k,8),'ZData',pos(k,9));
   set(hp4,'XData',pos(k,10),'YData',pos(k,11),'ZData',pos(k,12));
   set(hp5,'XData',pos(k,13),'YData',pos(k,14),'ZData',pos(k,15));
   set(hp6,'XData',pos(k,16),'YData',pos(k,17),'ZData',pos(k,18));

else
    k=1;
    set(hp,'XData',pos(k,1),'YData',pos(k,2),'ZData',pos(k,3));
   axis([0 255 0 255 0 255]);
end

我只是想提一下这基于Jorge's answer on this question,所以再次感谢他

1 个答案:

答案 0 :(得分:6)

  1. text(x,y,z,'string')代替plot3应该将点数更改为文本,其中[x,y,z]是您正在绘制的每个点的坐标。
    注意: set的来电需要从set(hp3,'XData',x,'YData',y,'ZData',z)更改为set(htext,'pos',[x,y,z])。其中hp3plot3-handle对象的句柄,htexttext-handle对象的句柄。

  2. 要使用plot3(X,Y,Z) X=[x_1,x_2,...,x_n]Y=[y_1,y_2,...,y_n]Z=[z_1,z_2,...,z_n]

  3. 使用{{1}}连接点。