【问题标题】:Adding letters to 3D plot data points in Matlab在 Matlab 中向 3D 绘图数据点添加字母
【发布时间】:2012-01-09 17:42:02
【问题描述】:

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

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

所以问题是:

  • 有没有办法将圆圈或任何其他符号替换为实际字母,甚至是短词(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,所以再次感谢他

【问题讨论】:

    标签: matlab graph plot


    【解决方案1】:
    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]

    【讨论】:

    • 谢谢!可以肯定的是,$ 符号是否表示您正在报价?另外,我在某些时候使用了 set('X',1,'Y',2,'Z',3) ,它不断返回 Bad value for text 属性: 'XLimInclude'。我尝试将 XLimInclude 设置为“开”和“关”,结果相同,您知道它的来源吗?我会将我的代码添加到问题中,以便您查看问题所在。
    • @Mikalichov 是的,$ 是格式化的(即数学的 LaTeX 格式化)。我改变了格式。至于set 函数,也许在对set 的调用中将'X' 更改为'XData'YZ 的类似函数。不知道还有什么建议。
    • 好吧,我首先尝试使用 'XData' 等,但返回了 "There is no 'XData' property in the 'text' class." 错误,因此使用“X”等代替。无论如何,我会继续尝试文本轨道,谢谢!
    • 请注意,如果您愿意,也可以使用text('Position', [x,y,z], 'String', string) 创建文本对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多