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

44 次查看(过去 30 天)
卓也
卓也 2023-12-4
评论: 卓也 2023-12-9
下記のコードは各関節の時系列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")

采纳的回答

Atsushi Ueno
Atsushi Ueno 2023-12-9
> 始点データのマーカーのサイズ,形を変更する方法をご教授して頂きたいです
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 个评论
Atsushi Ueno
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"]);
卓也
卓也 2023-12-9
ご回答いただき,ありがとうございます!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 ライン プロット 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!