新浪博客

如何在Matlab极坐标polar绘图上增加刻度单位

2016-05-17 21:40阅读:
如何在Matlab极坐标polar绘图上增加刻度单位
一直以来,想在极坐标上面增加刻度,不知道该如何更改,经常是手动加入,费时费力。今天突然想起来为何不能通过修改Matlab的已知源代码,去更改呢?百度了之后,找到了以下的文章:
Site: http://blog.renren.com/share/240189843/2199786563
先不看文章,先来看Matlab默认绘制出来的效果图:
命令如下:
t = 0 : .01 : 2 * pi;
polar(t, sin(2 * t) .* cos(2 * t), '--r');
如何在Matlab极坐标polar绘图上增加刻度单位

那么问题来了,我想在0360上面增加度的标记,即“°”,在0.10.2……上面增加微米标记,即μm。那么我们查找Maltab的代码。在命令窗口敲出polar,然后双击选中,右键选择打开该命令。
如何在Matlab极坐标polar绘图上增加刻度单位
打开后,找到第153(int2str(i*30))和161(loc)行,即为我们想要增加的度的标示部分:
如何在Matlab极坐标polar绘图上增加刻度单位
更改为如下程序:
如何在Matlab极坐标polar绘图上增加刻度单位
第二部分的修改,找到第136行:
如何在Matlab极坐标polar绘图上增加刻度单位
修改为:
如何在Matlab极坐标polar绘图上增加刻度单位
大功告成。注意,我们尽量不去修改Matlab原始的代码,所以我们这里将整个修改后的程序另存为:Mypolar.m。下面我们看一下修改后的绘图效果:
命令如下:
t = 0 : .01 : 2 * pi;
Mypolar(t, sin(2 * t) .* cos(2 * t), '--r');
如何在Matlab极坐标polar绘图上增加刻度单位
同理,我们还可以用类似的方法修改相应代码,得到我们想要的效果。
最后,还是那句话:多看Matlab Help!多看Matlab Help!多看Matlab Help

参考:

Site: http://blog.renren.com/share/240189843/2199786563

matlab极坐标图改变坐标系标注
作者 : 黎芳芳
这两个命令的角度是定死的,没有提供任何接口去修改。
你一定要改,就只能改这两个命令的源代码了

如何在Matlab极坐标polar绘图上增加刻度单位
打开polar.m后可以找到下面这段语句
% 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)
th改成别的值就可以绘制不同的角度了,比如改成th = (1:4)*2*pi/8;就是45度的分割线了。
当然下面还要继续改显示的度数
% 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
把两个30全部改为45即可。
---------------------------------------------------------------------------------

t = 0:.01:2*pi;
polar(t,sin(2*t).*cos(2*t),'--r')
set(gca,'xdir','reverse')

次函数可简单的将x轴反向。。。
---------------------------------------------------------------------------------
基本上, 若是使用polar画图好像就无法更改其相关属性!
虽然可以使用set(gca,...)更改其相关属性, 但你会发现并没有更动! 原因为误认那些标示为'XTickLabel', 其实都不是, 切入polar.m看仔细就会发现其为text产生, 所以外部更改都无效!
我试了直接更改polar.m来实现即可
% draw radial circles
c82 = cos(82*pi/180);
s82 = sin(82*pi/180);
rinc = (rmax-rmin)/rticks; ppp=(rmin+rinc):rinc:rmax; [color=red]ppp=fliplr(ppp); iip=0;[/color]
for i=(rmin+rinc):rinc:rmax
hhh = plot(xunit*i,yunit*i,ls,'color',tc,'linewidth',1,...
'handlevisibility','off');[color=red] iip=iip+1;
[/color] text((i+rinc/20)*c82,(i+rinc/20)*s82, ...
[' ' num2str([color=red]ppp(iip[/color][color=red])[/color])],'verticalalignment','bottom',...
'handlevisibility','off')
end
set(hhh,'linestyle','-') % Make outer circle solid
------------------------

t=0:.01:2*pi; hh=polar77(20*t,200*sin(2*t).*cos(2*t),'--r');
-----------------------

此方法提供者应该是个高手,可惜我没有尝试成功
---------------------------------------------------------------------------------
官网上提供polarlabels.m
http://www.mathworks.com/matlabc ... ge/?term=polarlabel
http://www.chinavib.com/forum/viewthread.php?tid=74599&extra=&page=1

polarlabels([0:360]*pi/180,abs(sin([0:360]*pi/180))*10,'b',-90,10)
可实现一些简单的变化。。。似乎实现的功能不够强大
---------------------------------------------------------------------------------
有人提议polarhg.m
polarhg(theta,rho,'tdir','clockwise','rlim',[0 10], ...'rtick',[0 3 6 9],'tstep',45,'torig','up', 'color','m','linestyle',':')。这样整个图形就旋转了90度。
------------------

另外,polarhg还有个问题,当运行,比如,
>> theta = 0:pi/5:pi;
>> rho = 10*rand(size(theta));
>> h = polarhg(theta,rho,'torig','down','color','m','linestyle',':');
??? Output argument 'H' (and maybe others) not assigned during call to 'D:\matlab\work\polarhg.m (polarhg)'.
Error in ==> polarhg at 56
N = nargin;
-----------------------

解决问题:改第286行的num2str(Rmax-i)
暂时没有下到polarhg.m文件。。。
——-----------------------------------------------------------------------------
个人推荐直接改polar.m文档,简单易实现。。。。

附:
修改后的Mypolar程序如下:
function

我的更多文章

下载客户端阅读体验更佳

APP专享