Plotting X,Y,Z Data
31 views (last 30 days)
Show older comments
Abdullah Azzam
on 17 Mar 2023
Commented: Star Strider
on 18 Mar 2023
Hi All,
I have a data set that shows changes of strain at differnt locations in time domain where my X and Y axis are the location and the strain value and the Z axis is the time domain. However, when using plot3 the graphs look distorted as shown in attached image. I have uploaded the data set also in here in case someone can help me with it. When looking at the uploaded csv file, column A is time, B is location (Angle), and the rest of the column are different data parameter, in the image shown I have been using column G value that contain the strains. What would be the best way to plot those data at differnt timesteps (i.e. every 100 time setp.). Below is the code I have used to plot given that Matrix is just the matrix that contain the csv file data. I have been using for loop to get the data every 500 timesetp as which is shown in the attached csv file. I have also tried removing the zeros at the end of the matrix but the results are the same.
Thanks for the help in advance
plot3(Matrix(:,1),Matrix(:,2),Matrix(:,7))
1 Comment
Guilherme
on 17 Mar 2023
Can you please share an snippet on how you're defining your matrix? It seems that doing plot3(Matrix...) is getting all the values independent of the time stamp. You should probably create a structure where you do multiple plots, everyone of them for a single time stamp, for instance:
count = 0;
sample_jump = 500;
for i = 1:n_time_samples
plot3(Matrix(count+1:1:sample_jump,1),Matrix(count+1:1:sample_jump,2),Matrix(count+1:1:sample_jump,7));
count = count+sample_jump;
end
Accepted Answer
Star Strider
on 17 Mar 2023
With a bit of help from accumarray, it is possible to separate the traces so that there are no connecting lines —
Matrix = readmatrix('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1328180/Strain%20Data.csv')
M127 = sortrows(Matrix(:,[1 2 7]),1);
[U1,ix1,ix2] = unique(M127(:,1),'stable'); % Column #1 Unique Values & Indices
Uix2 = unique(ix2);
for k = 1:size(M127,2)
Col{k,:} = accumarray(ix2, M127(:,k), [], @(x){x}); % Separate Rows By 'ix2'
end
% Col
% minLen = min(cellfun(@numel,Col{1}))
for k = 1:4
Set{k,:} = [Col{1}{k+1} Col{2}{k+1} Col{3}{k+1}]; % Creeate Data Sets
end
% Len = 2:minLen;
figure
hold on
for k = 1:numel(Set)
plot3(Set{k}(2:end,1), Set{k}(2:end,2), Set{k}(2:end,3), 'LineWidth',1.5, 'DisplayName',"Set "+k)
end
hold off
grid on
xlabel('X')
ylabel('Y')
zlabel('Z')
legend('Location','best')
view(30,30)
There was a duplicated ‘x’ value in ‘Set 3’ that was causing a straight line to appear where no lines should appear. That was solved by beginning the indexing with 2 in the plot3 calls.
.
2 Comments
More Answers (0)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!