MATLAB Answers

Log scale for radius axis in a polar plot

85 views (last 30 days)
btåla
btåla on 31 Jan 2019
Answered: Mike D. on 25 Nov 2020
Hi everyone,
I am looking for a 'trick' to make a polar plot (polarscatter in this case) which presents my data on a log scale through the r-axis.
Has anyone been able to do that. It seems like it is not possible with 'traditional' ways like setting the RLim. The point is that I have many data that are in between 10e-6 and 10e-2. All I get is a plot with a bunch of data overlapping around 0 and some scattered data around 10e-2. I would like to have a plot where on the r-axis I have a range that goes from 10e-6 to 10e-2, as only in this way I can clearly visuallize the data close to 10e-6.
I know that since it is a polar plot, the r range starts from 0 and the log of it is infinite but surprisingly, I see very similar plots done with matlibplot in python or other softwares (licensed ones) but I would like to make use of Matlab if that is possible.
test_polar.jpg
Any help is appreciated

Accepted Answer

Star Strider
Star Strider on 31 Jan 2019
Try this:
th = linspace(0, 2*pi, 9); % Create Angles
r = rand(1, numel(th)) .* 10.^(1:numel(th))-9; % Create Data
figure
polarplot(th, log10(r), 'p')
Ax = gca;
Ax.RTick = (2:2:numel(th)-1);
Ax.RTickLabel = compose('10^{%2d}',(2:2:numel(th)-1)-10);
% Ax.RTickLabel = sprintfc('10^{%2d}',(2:2:numel(th)-1)-10); % Use ‘sprintfc’ If You Do Not Have ‘compose’
Experiment to get the result you want.
  4 Comments

Sign in to comment.

More Answers (1)

Mike D.
Mike D. on 25 Nov 2020
Here is how I created a logarithmic RAxis for altitudes:
hAx2 = polaraxes(hFig,'OuterPosition',AxOutPos2,'ThetaAxisUnits','degrees', ...
'ThetaDir','clockwise','ThetaZeroLocation','top','FontSize',10', ...
'ThetaTick',0:30:360,'Color',[0 0 0],'ThetaColor',[1 1 1], ...
'ThetaTickLabel', {'N','','','E','','','S','','','W','',''}, ...
'RAxisLocation',15,'RLim',[1 5.301],'RTick',[3,4,5],'RColor',[1 1 1], ...
'RTickLabel',{'1k','10k','100k'}, 'GridAlpha',0.5);
hold(hAx2,'on');
hp = polarplot(hAx2,windDirs*pi/180,log10(altitudes),'yo','MarkerSize',2);

Community Treasure Hunt

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

Start Hunting!