Merge 2D plot with polar plot

3 次查看(过去 30 天)
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 个评论
Mathieu NOE
Mathieu NOE 2024-1-15
hello
it is certainly doable , so what's your issue ?
do you have some data ? code ?
Jorge Luis
Jorge Luis 2024-1-16
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.

请先登录,再进行评论。

采纳的回答

Jaime Abad Arredondo
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(:));

更多回答(1 个)

Jorge Luis
Jorge Luis 2024-1-16
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 个评论
Jaime Abad Arredondo
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 2024-1-16
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.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Polar Plots 的更多信息

产品


版本

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by