- plot3:Lineオブジェクト ⇒ マーカーの色・形・サイズをデータ点毎に設定できない(表示有無は設定できる)
- scatter3:Scatterオブジェクト ⇒ マーカーの色・サイズをデータ点毎に設定できる (形は設定できない)
特定のマーカーのサイズ,形の変更方法
44 次查看(过去 30 天)
显示 更早的评论
下記のコードは各関節の時系列3次元データをプロットしているのですが,データの始点のマーカーの大きさ,もしくは形を変更したいと考えております.
始点データのマーカーのサイズ,形を変更する方法をご教授して頂きたいです.
%ファイル読み込み
fname = "xsens";
T = readtable(fname,'Sheet','Segment Position');
T = T(1202:1422,:); %投球動作範囲
%データ分割
LeftUpperArm = [T.LeftUpperArmX,T.LeftUpperArmY,T.LeftUpperArmZ];
LeftForeArm = [T.LeftForearmX,T.LeftForearmY,T.LeftForearmZ];
LeftHand = [T.LeftHandX,T.LeftHandY,T.LeftHandZ];
%%
%3D描画
h1 = plot3(RightUpperArm(:,1),RightUpperArm(:,2),RightUpperArm(:,3),"or");
hold on
h2 = plot3(RightForeArm(:,1),RightForeArm(:,2),RightForeArm(:,3),"ob");
h3 = plot3(RightHand(:,1),RightHand(:,2),RightHand(:,3),"og");
%label
xlabel("x",'FontSize',12,"FontWeight","bold",'Color','r')
ylabel("y",'FontSize',12,"FontWeight","bold",'Color','b')
zlabel("z",'FontSize',12,"FontWeight","bold",'Color','g')
legend("UpperArm","ForeArm","Hand")
0 个评论
采纳的回答
Atsushi Ueno
2023-12-9
> 始点データのマーカーのサイズ,形を変更する方法をご教授して頂きたいです
hold onでグラフ描画内容を保持後、始点データのみ個別にプロットすれば事済む話ですが、データ系列内の「データ点毎にプロパティ値を設定」する事もできる事もまた事実です。
%ファイル読み込み
fname = "xsens";
T = readtable(fname,'Sheet','Segment Position');
T = T(1202:1422,:); %投球動作範囲
%データ分割
%LeftUpperArm = [T.LeftUpperArmX,T.LeftUpperArmY,T.LeftUpperArmZ];
%LeftForeArm = [T.LeftForearmX,T.LeftForearmY,T.LeftForearmZ];
%LeftHand = [T.LeftHandX,T.LeftHandY,T.LeftHandZ];
%%
%3D描画
%h1 = plot3(RightUpperArm(:,1),RightUpperArm(:,2),RightUpperArm(:,3),"or");
%hold on
%h2 = plot3(RightForeArm(:,1),RightForeArm(:,2),RightForeArm(:,3),"ob");
%h3 = plot3(RightHand(:,1),RightHand(:,2),RightHand(:,3),"og");
h1 = scatter3(T, ["RightUpperArmX","RightForearmX","RightHandX"] ...
, ["RightUpperArmY","RightForearmY","RightHandY"] ...
, ["RightUpperArmZ","RightForearmZ","RightHandZ"]);
%label
xlabel("x",'FontSize',12,"FontWeight","bold",'Color','r')
ylabel("y",'FontSize',12,"FontWeight","bold",'Color','b')
zlabel("z",'FontSize',12,"FontWeight","bold",'Color','g')
legend("UpperArm","ForeArm","Hand")
% 描画設定
myLength = size(h1(1).XData,2); % 投球動作範囲の長さを取得
myMarker = {"o",">","<"}; % マーカーの形をデータ系列毎(o・>・<)に設定
[h1.Marker] = myMarker{:}; % マーカーの形はデータ点毎に設定できない
mySize = [200,repmat(50,1,myLength-1)];
%[h1.SizeDataMode] = deal("manual"); % データ個別のサイズ(SizeData)。無くても自動設定される
[h1.SizeData] = deal(mySize); % マーカーのサイズ(始点のみ200、他は50に設定)
myRed = cat(1,[0,0,0],repmat([1,0,0],myLength-1,1));
myBlue = cat(1,[0,0,0],repmat([0,0,1],myLength-1,1));
myGreen = cat(1,[0,0,0],repmat([0,1,0],myLength-1,1));
myColor = {myRed,myBlue,myGreen};
%[h1.MarkerEdgeColor] = deal("flat"); % データ個別の色(CData)。無くても自動設定される
[h1.CData] = myColor{:}; % マーカーの色(始点のみ黒、他はデータ系列毎(赤・青・緑)に設定)
2 个评论
Atsushi Ueno
2023-12-9
移动:Atsushi Ueno
2023-12-9
余談ですが:
- 入力データ1行目の項目名が MATLAB の変数名として有効ではない様です
- 上記のため、スペースを削除するなど項目名が自動的に変更されています
- readtable 関数で読み込んだテーブルを直接 plot3 関数に入力する事ができます
- plot3 関数では複数のラインを一度に描画する事ができます
- その場合「LineSpecの指定」は「Lineのプロパティ設定」として行います
T = readtable("xsens","Sheet","Segment Position");
T = T(1202:1422,:); %投球動作範囲
%3D描画
h1 = plot3(T, ["RightUpperArmX","RightForearmX","RightHandX"] ...
, ["RightUpperArmY","RightForearmY","RightHandY"] ...
, ["RightUpperArmZ","RightForearmZ","RightHandZ"]);
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!