Set y-axis as vertical when plotting in 3d

44 ビュー (過去 30 日間)
Jon Matthis
Jon Matthis 2015 年 10 月 18 日
コメント済み: Alec Jacobson 2022 年 8 月 18 日
By default, the 'plot3' function assumes that Z-data denotes vertical data. For example, if I were plotting motion capture data of, say, a subject's right foot - plot3(rFootX, rFootY, rFootZ) - it would plot the 'rFootZ' data as the vertical position of the foot.
Is there a way to set 'plot3' so that it uses Y as the default vertical axis? That is, if my motion capture system outputs the vertical position of a subjects' right foot as 'rFootY,' can I set things up so that plotting 'plot3(rFootX, rFootY, rFootZ)' displays the data correctly (with Y pointing up)?
Up until now, I have been using a little helper function to get things to plot with Y pointing up:
function plot3y(x,y, z,varargin) plot3(x,-z,y,varargin{:})
But this gets VERY confusing when trying to manipulate the resulting plots using the default Matlab functions like "axis" and "surface," as these assume that the Z-axis is the vertical.
I have also played around with using camroll (specifically, 'camroll(-90)'), but this tends to get screwy when I start adjusting the the viewpoint (the camera still tries to rotate around a Z-vertical axis).
tl;dr - I'm looking for some setting that I adjust that will set the Y-axis as the default vertical when using 'plot3'
  1 件のコメント
Yi Wan
Yi Wan 2018 年 10 月 22 日
Hi John,
Did you find the final solution other than using camup?

サインインしてコメントする。

採用された回答

Mike Garrity
Mike Garrity 2015 年 10 月 19 日
Perhaps you just want to set the CameraUpVector ?
xlabel('X')
ylabel('Y')
zlabel('Z')
box on
view(3)
camup([0 1 0])
  4 件のコメント
Eva Herbst
Eva Herbst 2021 年 5 月 20 日
I found that setting the camera view in the code before the camup worked.
Still doesn't work if you want to interact with the figure but if you just need one angle for an image then this works well.
Another workaround is recoloring the axes and then rotating all of your data accordingly, but this results in messy code. Solves the interaction problem though.
Alec Jacobson
Alec Jacobson 2022 年 8 月 18 日
Still no solution that maintains during interaction?

サインインしてコメントする。

その他の回答 (4 件)

Pierce
Pierce 2019 年 10 月 17 日
編集済み: Pierce 2019 年 10 月 17 日
Unfortunately, I couldn't find a soluition based on axis manipulation so I ended up modifying the data and relabelling the axis to achieve the orientation I wanted.
iReorder = [-1 3 2]; % Invert X axis, and swap Y + Z axis. Unity to Matlab transformation
iInvert = find(iReorder < 0); % Column indicies to invert
iReorder = abs(iReorder); % Column indicies to reorder
Pxyz; % Orignal x y z data
Pxyz = Pxyz(:,iReorder); % Reorder x y z data to x z y
Pxyz(:,iInvert) = -Pxyz(:,iInvert); % Invert data to -x z y
plot3(Pxyz(:,1),Pxyz(:,2),Pxyz(:,3),'.b')
xlabel('x');
ylabel('z');
zlabel('y');
Optionaly, the axis can be inverted instead of inverting the data.
h.axes = axes;
set(h.axes,'XDir','reverse')

Blake Andersen
Blake Andersen 2018 年 6 月 15 日
This answer only works if you're happy switching from a right handed coordinate system to left. I want a consistent way to plot data in the system that is standard for my industry: +X -> right +Y -> up +Z -> forward Simply changing the labels and transforming the data results in the x axis of the plot displaying the opposite of actual.
There are a string of hacks that I have been doing to cover this up, but I just want to change the orientation of the plot.

Pierce
Pierce 2018 年 12 月 14 日
I'm trying to do the same but haven't quiet found a solution outside of reordering my input data.
setting the camera to [0 1 0] is a starting point, but as you say it doesn't survive rotation operations.
setting the direction of X axis to reverse can help
% Unity coordinate space
set(h.axes,'CameraUpVector',[0 1 0]) % Set Y axis as vertical
set(h.axes,'XDir','reverse') % Reverse the x axis

MCH
MCH 2019 年 10 月 17 日
編集済み: MCH 2019 年 10 月 17 日
Has anyone found a solution? This is quite frustrating and I am having to apply hacks when switching from 3D to 2D input files. I just want to change the orientation of the plot. How can this be so hard?
  1 件のコメント
Matthew Galles
Matthew Galles 2020 年 10 月 14 日
編集済み: Matthew Galles 2020 年 10 月 14 日
Just wasted a few hours trying to sort this out.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeGeographic Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by