极坐标
function hpol = polarplot(varargin)
%POLAR Polar coordinate plot.
% POLAR(THETA, RHO) makes a plot using polar coordinates of
% the angle THETA, in radians, versus the radius RHO.
% POLAR(THETA, RHO, S) uses the linestyle specified in string S.
% See PLOT for a description of legal linestyles.
%
% POLAR(AX, ...) plots into AX instead of GCA.
%
% H = POLAR(...) returns a handle to the plotted object in H.
%
% Example:
% t = 0 : .01 : 2 * pi;
% polar(t, sin(2 * t) .* cos(2 * t), '--r');
%
% See also PLOT, LOGLOG, SEMILOGX, SEMILOGY.
% Copyright 1984-2013 The MathWorks, Inc.
% Parse possible Axes input
[cax, args, nargs] = axescheck(varargin{:});
error(nargchk(1, 3, nargs, 'struct'));
if nargs < 1 || nargs > 3
error(message('MATLAB:polar:InvalidDataInputs'));
elseif nargs == 2
theta = args{1};
rho = args{2};
if ischar(rho)
line_style = rho;
rho = theta;
[mr, nr] = size(rho);
if mr == 1
theta = 1 : nr;
else
th = (1 : mr)';
theta = th(:, ones(1, nr));
end
else
line_style = 'auto';
end
elseif nargs == 1
theta = args{1};
line_style = 'auto';
rho = theta;
[mr, nr] = size(rho);
if mr == 1
theta = 1 : nr;
else
th = (1 : mr)';
theta = th(:, ones(1, nr));
end
else % nargs == 3
[theta, rho, line_style] = deal(args{1 : 3});
end
if ischar(theta) || ischar(rho)
error(message('MATLAB:polar:InvalidInputType'));
end
if ~isequal(size(theta), size(rho))
error(message('MATLAB:polar:InvalidInputDimensions'));
end
% get hold state
cax = newplot(cax);
next = lower(get(cax, 'NextPlot'));
hold_state = ishold(cax);
% get x-axis text color so grid is in same color
if graphicsversion(cax, 'handlegraphics')
tc = get(cax, 'XColor');
else
% get the axis gridColor
axGridColor = get(cax,'GridColor');
tc = axGridColor;
end
ls = get(cax, 'GridLineStyle');
% Hold on to current Text defaults, reset them to the
% Axes' font attributes so tick marks use them.
fAngle = get(cax, 'DefaultTextFontAngle');
fName = get(cax, 'DefaultTextFontName');
fSize = get(cax, 'DefaultTextFontSize');
fWeight = get(cax, 'DefaultTextFontWeight');
fUnits = get(cax, 'DefaultTextUnits');
set(cax, ...
'DefaultTextFontAngle', get(cax, 'FontAngle'), ...
'DefaultTextFontName', get(cax, 'FontName'), ...
'DefaultTextFontSize', get(cax, 'FontSize'), ...
'DefaultTextFontWeight', get(cax, 'FontWeight'), ...
'DefaultTextUnits', 'data');
% only do grids if hold is off
if ~hold_state
% make a radial grid
hold(cax, 'on');
% ensure that Inf values don't enter into the limit calculation.
arho = abs(rho(:));
maxrho = max(arho(arho ~= Inf));
hhh = line([-maxrho, -maxrho, maxrho, maxrho], [-maxrho, maxrho, maxrho, -maxrho], 'Parent', cax);
set(cax, 'DataAspectRatio', [1, 1, 1], 'PlotBoxAspectRatioMode', 'auto');
v = [get(cax, 'XLim') get(cax, 'YLim')];
ticks = sum(get(cax, 'YTick') >= 0);
delete(hhh);
% check radial limits and ticks
rmin = 0;
rmax = v(4);
rticks = max(ticks - 1, 2);
if rticks > 5 % see if we can reduce the number
if rem(rticks, 2) == 0
rticks = rticks / 2;
elseif rem(rticks, 3) == 0
rticks = rticks / 3;
end
end
% define a circle
th = 0 : pi / 50 : 2 * pi;
xunit = cos(th);
yunit = sin(th);
% now really force points on x/y axes to lie on them exactly
inds = 1 : (length(th) - 1) / 4 : length(th);
xunit(inds(2 : 2 : 4)) = zeros(2, 1);
yunit(inds(1 : 2 : 5)) = zeros(3, 1);
% plot background if necessary
if ~ischar(get(cax, 'Color'))
% patch('XData', xunit * rmax, 'YData', yunit * rmax, ...
% 'EdgeColor', tc, 'FaceColor', get(cax, 'Color'), ...
% 'HandleVisibility', 'off', 'Parent', cax);
patch('XData', xunit * rmax, 'YData', yunit * rmax, ...
'EdgeColor', 'g', 'FaceColor', get(cax, 'Color'), ...
'HandleVisibility', 'off', 'Parent', cax);
end
% %
% % draw radial circles
c82 = cos(82 * pi / 180);
s82 = sin(82 * pi / 180);
rinc = (rmax - rmin) / rticks;
for i = (rmin + rinc) : rinc : rmax
hhh = line(xunit * i, yunit * i, 'LineStyle', ls, 'Color', tc, 'LineWidth', 1, ...
'HandleVisibility', 'off', 'Parent', cax);
% text((i + rinc / 20) * c82, (i + rinc / 20) * s82, ...
% [' ' num2str(i)], 'VerticalAlignment', 'bottom', ...
% 'HandleVisibility', 'off', 'Parent', cax);
end
set(hhh, 'LineStyle', '-'); % Make outer circle solid
%
% plot spokes
th = (1 : 6) * 2 * pi / 12;
cst = cos(th);
snt = sin(th);
cs = [-cst; cst];
sn = [-snt; snt];
line(rmax * cs, rmax * sn, 'LineStyle', ls, 'Color', tc, 'LineWidth', 1, ...
'HandleVisibility', 'off', 'Parent', cax);
%
% annotate spokes in degrees
rt = 1.1 * rmax;
for i = 1 : length(th)
text(rt * cst(i), rt * snt(i), int2str(i * 30),...
'HorizontalAlignment', 'center', ...
'HandleVisibility', 'off', 'Parent', cax);
if i == length(th)
loc = int2str(0);
else
loc = int2str(180 + i * 30);
end
text(-rt * cst(i), -rt * snt(i), loc, 'HorizontalAlignment', 'center', ...
'HandleVisibility', 'off', 'Parent', cax);
end
%
% set view to 2-D
view(cax, 2);
% set axis limits
axis(cax, rmax * [-1, 1, -1.15, 1.15]);
end
% Reset defaults.
set(cax, ...
'DefaultTextFontAngle', fAngle , ...
'DefaultTextFontName', fName , ...
'DefaultTextFontSize', fSize, ...
'DefaultTextFontWeight', fWeight, ...
'DefaultTextUnits', fUnits );
% transform data to Cartesian coordinates.
xx = rho .* cos(theta);
yy = rho .* sin(theta);
%
% plot data on top of grid
if strcmp(line_style, 'auto')
q = plot(xx, yy, 'Parent', cax);
else
q = plot(xx, yy, line_style, 'Parent', cax);
end
if nargout == 1
hpol = q;
end
if ~hold_state
set(cax, 'DataAspectRatio', [1, 1, 1]), axis(cax, 'off');
set(cax, 'NextPlot', next);
end
set(get(cax, 'XLabel'), 'Visible', 'on');
set(get(cax, 'YLabel'), 'Visible', 'on');
if ~isempty(q) && ~isdeployed
makemcode('RegisterHandle', cax, 'IgnoreHandle', q, 'FunctionName', 'polar');
end
end
改了原始背景,删除半径刻度
x1 = x * pi/180;
figure;
polarplot(x1,y2,'-r');
set(0,'defaultfigurecolor','w') %%改背景

浙公网安备 33010602011771号