Merge 2D plot with polar plot

7 Ansichten (letzte 30 Tage)
Jorge Luis
Jorge Luis am 15 Jan. 2024
Kommentiert: Jorge Luis am 16 Jan. 2024
Hello, I would like to merge two different plots in a single one like a 2D plot with a polar plot like it is shown in the image below. I would apreciate the help.
Thank you for your help.
  2 Kommentare
Mathieu NOE
Mathieu NOE am 15 Jan. 2024
hello
it is certainly doable , so what's your issue ?
do you have some data ? code ?
Jorge Luis
Jorge Luis am 16 Jan. 2024
Hi, sure. Here I attached the example of the two plots provided in the image. The file plot1.txt is the blue line with x and y coordinates as presented in the two columns respectively. Then, the second plot which is a polar plot should be placed on top of plot 1 whose data is in plot2.txt. Herein, the first column contains the angles and the second column contains the data with same units as plot 1. Thank you.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jaime Abad Arredondo
Jaime Abad Arredondo am 16 Jan. 2024
As Mathieu said in the comment, what you want to do is definetly doable. As an example:
theta=linspace(0,2*pi,200);
r=3.*cos(2.*theta).^2; %Random made up function.
figure(1)
clf
hold all
p=plot(r.*cos(theta),r.*sin(theta),'r');
%polar(theta,r,'b') %You can generate the polar plots as you wish.
N=50;
x_aux=linspace(-3,3,N);
Z=peaks(N); %Use built-in peaks function as example
surf(x_aux,x_aux,peaks(N))
shading interp
As you can see, the only caveat when mixing 2d and 3d elements in matlab is that the 2d elements are usually drawn at z==0, and therefore the surface plot is overlaid on top of the polar plots. In order to fix this, you have to modify the z-data of the polar plot:
figure(2)
clf
hold all
p=plot(r.*cos(theta),r.*sin(theta),'r');
%polar(theta,r,'b') %You can generate the poar plots as you wish.
N=50;
x_aux=linspace(-3,3,N);
Z=peaks(N);
surf(x_aux,x_aux,peaks(N))
shading interp
%Setting the z-component of the polar plot to be the
% maximum value of the surface plot, so that it appears on top
p.ZData=ones(size(p.XData)).*max(Z(:));

Weitere Antworten (1)

Jorge Luis
Jorge Luis am 16 Jan. 2024
Hi, thank for your answer and help. Here I provide more details of what I need based on the plot provided in my first question. Here I attached the example of the two plots provided in the image. The file plot1.txt is the blue line with x and y coordinates as presented in the two columns respectively. Then, the second plot which is a polar plot should be placed on top of plot 1 whose data is in plot2.txt. Herein, the first column contains the angles and the second column contains the data with same units as plot 1. Thank you.
  2 Kommentare
Jaime Abad Arredondo
Jaime Abad Arredondo am 16 Jan. 2024
Then it is just a matter of using a hold command to have the two plots together. Importing the data, going from polar to cartesian coordinates and plotting everything together you should get the desired plot...
data_cart=readmatrix('plot1.txt');
data_pol=readmatrix('plot2.txt');
plot(data_cart(:,1),data_cart(:,2),'b')
hold all
plot(data_pol(:,2).*cosd(data_pol(:,1)),data_pol(:,2).*sind(data_pol(:,1)),'r')
Jorge Luis
Jorge Luis am 16 Jan. 2024
I used that alternative. I was looking for another option when combining the cartesian plot with the polar plot command in the same graph. Thank you for your response.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Polar Plots finden Sie in Help Center und File Exchange

Produkte


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by