特定のマーカーのサイズ,形の変更方法

45 views (last 30 days)
卓也
卓也 on 4 Dec 2023
Commented: 卓也 on 9 Dec 2023
下記のコードは各関節の時系列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")

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 9 Dec 2023
> 始点データのマーカーのサイズ,形を変更する方法をご教授して頂きたいです
hold onでグラフ描画内容を保持後、始点データのみ個別にプロットすれば事済む話ですが、データ系列内の「データ点毎にプロパティ値を設定」する事もできる事もまた事実です。
今回の要求に対しては、plot 関数よりも scatter 関数を使うべきです。
   
%ファイル読み込み
fname = "xsens";
T = readtable(fname,'Sheet','Segment Position');
Warning: Column headers from the file were modified to make them valid MATLAB identifiers before creating variable names for the table. The original column headers are saved in the VariableDescriptions property.
Set 'VariableNamingRule' to 'preserve' to use the original column headers as table variable names.
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 Comments
Atsushi Ueno
Atsushi Ueno on 9 Dec 2023
Moved: Atsushi Ueno on 9 Dec 2023
余談ですが:
  • 入力データ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"]);
卓也
卓也 on 9 Dec 2023
ご回答いただき,ありがとうございます!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!