How do I plot six different matrices?

조회 수: 2 (최근 30일)
Arda Nova
Arda Nova 2019년 1월 6일
편집: Hans Scharler 2022년 5월 16일
I have 6 different matrixes, 22x1 each one. When I plot them I get this:
plot(x1,y1,'o',x2, y2,'o', x3, y3,'o') %%Using this code
What I need to have is this:
In other words, I need to connect, for example, [x1(1) y1(1)] [x2(1) y2(1)],[x3(1) y3(1)].
I used this but it didn't work
for i=1:1 plot([x1(i) y1(i)], [x2(i) y2(i)] ,[x3(i) y3(i)])
end

채택된 답변

Image Analyst
Image Analyst 2019년 1월 6일
It looks like your data is already sorted, so we can skip the sorting/ordering in your specific case, at least for this data sample, and just draw lines:
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
workspace; % Make sure the workspace panel is showing.
format long g;
format compact;
fontSize = 20;
x1=[
1
1
1
1
0.999999912
0.999690873
0.998202938
0.996110802
0.992961257
0.980004982
0.924939672
0.820535897
0.602167816
0.398690056
0.203859669
-0.075955146
-0.304796417
-0.557870458
-0.864153125
-0.99993919
-0.988967944
-0.999529311]
y1=[
0
-2.54E-10
-3.15E-07
-1.62E-05
-0.000419996
-0.02486278
-0.059924071
-0.088109422
-0.118439611
-0.198972951
-0.380113933
-0.571594998
-0.798369539
-0.917085732
-0.97900012
-0.997111235
-0.952417526
-0.82992804
-0.50322895
-0.011027972
0.14812969
0.030678273]
x2=[
2
2
2
2
1.999999912
1.999690873
1.998202929
1.996110712
1.992960745
1.979993679
1.924375819
1.81311973
1.510835006
0.912920593
0.344944452
-0.139948732
-0.785972062
-1.356710455
-1.804704529
-1.980245442
-1.987180774
-1.998004715]
y2=[
0
-2.54E-10
-3.15E-07
-1.62E-05
-0.000419996
-0.024874491
-0.060061709
-0.08853234
-0.119452311
-0.203727586
-0.413690537
-0.693157058
-1.215890722
-1.774737732
-1.968997637
-1.995061545
-1.829041733
-1.431471605
-0.842880325
-0.208511267
0.088370616
0.085876712]
x3=[
3
3
3
3
2.999999912
2.999690873
2.998202929
2.996110712
2.992960745
2.979993678
2.924375609
2.813103613
2.509294444
1.843529705
0.621048704
-0.782583788
-1.680485396
-2.277495171
-2.690548186
-2.858916151
-2.893450016
-2.924109296]
y3=[
0
-2.54E-10
-3.15E-07
-1.62E-05
-0.000419996
-0.024874492
-0.060061779
-0.088532791
-0.119454264
-0.203752975
-0.414339097
-0.698834419
-1.27137721
-2.140752324
-2.93012533
-2.76123397
-2.276082999
-1.821542761
-1.306864177
-0.685939571
-0.334330296
-0.291390175]
plot(x1, y1, 'ro', 'LineWidth', 2);
hold on;
plot(x2, y2, 'ko', 'LineWidth', 2);
plot(x3, y3, 'bo', 'LineWidth', 2);
% Fit a circle to the innermost
[xc,yc,R,a] = circfit(x1, y1);
plot(xc, yc, 'r+', 'MarkerSize', 30, 'LineWidth', 2);
grid on;
% Draw lines from x1, y1 to xc, yc
for k = 1 : length(x1)
hold on;
plot([x1(k), xc], [y1(k), yc], 'r-');
end
% Draw lines from x2, y2 to x1, y1. Same for x3, y3.
for k = 1 : length(x1)
plot([x2(k), x1(k)], [y2(k), y1(k)], 'r-', 'LineWidth', 2);
plot([x2(k), x3(k)], [y2(k), y3(k)], 'b-', 'LineWidth', 2);
end
function [xc,yc,R,a] = circfit(x,y)
%CIRCFIT Fits a circle in x,y plane
%
% [XC, YC, R, A] = CIRCFIT(X,Y)
% Result is center point (yc,xc) and radius R. A is an optional
% output describing the circle's equation:
%
% x^2+y^2+a(1)*x+a(2)*y+a(3)=0
% by Bucher izhak 25/oct/1991
n=length(x); xx=x.*x; yy=y.*y; xy=x.*y;
A=[sum(x) sum(y) n;sum(xy) sum(yy) sum(y);sum(xx) sum(xy) sum(x)];
B=[-sum(xx+yy) ; -sum(xx.*y+yy.*y) ; -sum(xx.*x+xy.*y)];
a=A\B;
xc = -.5*a(1);
yc = -.5*a(2);
R = sqrt((a(1)^2+a(2)^2)/4-a(3));
end
0001 Screenshot.png
  댓글 수: 1
Arda Nova
Arda Nova 2019년 1월 6일
Yes, it was calculated beforehand. Half of the code you wrote, I don't even know, but I will learn for sure since I will need it for other projects of mine. I sincerely thank you, for I didn't know that it was this much troublesome to do. I thought it would be something like do the plot this way, and you are good to go. Again, thank you very much.

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Star Strider
Star Strider 2019년 1월 6일
This should get you started:
t = linspace(0, pi, 20); % Create Data
x = 3*cos(t); % Create Data
y = -3*sin(t); % Create Data
figure
plot(x, y, 'o', 'MarkerFaceColor','b')
hold on
plot([ones(size(x))-1; x], [ones(size(y))-0.5; y], '-b')
plot(0, 0.5, 'ob', 'MarkerFaceColor','b')
hold off
axis equal
The Plot —
How do I plot this - 2019 01 06.png
The idea is to plot individual lines from whatever you define as the origin (here: (0,0.5)), and the individual circles. The second plot call does that, using matrix arguments that correspond to [x_origin; x_destination], and [y_origin; y_destination].
  댓글 수: 2
Arda Nova
Arda Nova 2019년 1월 6일
Thank you. I will look it up.
Star Strider
Star Strider 2019년 1월 6일
The origin appears to be at (0,0). If it is somewhere else, you can easily adapt my code to change it. (I changed your ‘x’ vector to ‘x1’ to make it compatible with the rest of the code. I also changed the comma decimal separators to period.)
Now, with your data, this code:
figure
plot([zeros(size(x1)), x1]', [zeros(size(y1)), y1]','-ok', [x1, x2]', [y1, y2]','-ok', [x2, x3]', [y2, y3]','-ok', 'MarkerFaceColor','k')
axis equal
xlim([-3.5, 3.5])
produces this plot:
How do I plot this (2) - 2019 01 06.png
Chjange the circle colors if you want to. I chose to make them black to match the plot image you posted.

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2019년 1월 6일
What I would to is
  1. Take the inner most x and y vectors (let's call them x1 and y1) and fit to a circle. Use The FAQ. Now you should have the radii and the center.
  2. Then I would convert each of the 3 arrays to polar coordinates where the center/origin is the center of the innermost set.
  3. Then I would sort the points in each of the 3 sets by angle and convert back to cartesian coordinates. Now you have the points ordered from top left to bottom middle to top right.
  4. Then I'd have a loop where I go along the sorted x1, y1 arrays using plot() or line() to draw a line to the center point you found in setp 1.
  5. Then I'd have a loop over the second set of sorted x2,y2 (the middle set) where you draw a line, with plot() or line() to the corresponding index in the innermost (x1,y1) set, and the outermost (x3, y3) set. Now all lines are drawn.
Then you should be done. Note: this assumes that all vectors are the same length. You seem assured of this, but just to be robust, you should do a check first and throw an error to warn the user if they're not the same length.
I didn't use distance to closest point since some distances were quite similar and you looked like you wanted it to be ordered and not have any points skipped, so that's why I sorted and went down the sorted lists in a for loop.
Pretty easy algorithm, I think, but if you still have trouble, attach your x and y data.
  댓글 수: 1
Arda Nova
Arda Nova 2019년 1월 6일
It's a triple pendulum actually. Numbers taken from another code. Sorry, I couldn't really understand the steps, I am pretty new to matlab. I have given the numbers under "GMD Baloch " 's answer. I thought it would be easy. I was going to use paint :D, but wanted to try my chance here.

댓글을 달려면 로그인하십시오.


GMD Baloch
GMD Baloch 2019년 1월 6일
Can you provide me the data you want to plot, so that I may understand the problem well and help you
  댓글 수: 5
Arda Nova
Arda Nova 2019년 1월 7일
It works, and it's simple too. I really liked it. Thank you very much :)
GMD Baloch
GMD Baloch 2019년 1월 7일
You are welcome and if you liked my work kindly accept my answer

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by